PL/SQL - Sesión 2
Antonio Manuel Durán Rosal
Profesor en prácticas del MUPES por la UCO
[email protected] Desarrollo de Aplicaciones Web
I.E.S. Trassierra
2018/2019
Contenidos - Sesión 1
● Repaso SQL
● Introducción a PL/SQL
● Conceptos básicos
○ Unidades léxicas
○ Tipos de datos simples, variables y constantes
○ El bloque PL/SQL
○ Estructuras de control
○ Excepciones
Contenidos - Sesión 2
● Tipos de datos compuestos
○ Registros
○ Colecciones
○ Cursores
Contenidos - Sesión 3
● Abstracción en PL/SQL
○ Subprogramas
○ Paquetes
○ Objetos
● Disparadores
○ Definición
○ Ejemplos
● Interfaces
● Tutorial y ejercicios resueltos
3. Tipos de datos
compuestos
Tipos de datos compuestos
● Hasta ahora hemos visto los tipos de datos simples
● ¿Qué ocurre si queremos modelar un problema?
● Aparecen los llamados tipos de datos compuestos para sacarle el mayor
partido posible al lenguaje PL/SQL.
3.1. Registros
Registros
Un registro es un grupo de elementos relacionados almacenados en campos,
cada uno de los cuales tiene su propio nombre y tipo de dato.
Registros: declaración
No se puede usar el
tipo de dato REF
CURSOR
Registros: acceso a los campos
Registros: consideraciones
1. Mismo tipo
2. No se pueden comparar registros
3. No se pueden comprobar si son NULL
4. Se permiten SELECT pero no INSERT
Autoevaluación - Registros
App Kahoot!
3.2. Colecciones
Colecciones
Una colección es un grupo ordenado de elementos, todos del mismo tipo.
Cada elemento tiene un subíndice único que determina su posición en la
colección. Se distinguen:
● Arrays de longitud variable
● Tablas anidadas
3.2.1. Arrays de
longitud variable
Arrays de longitud variable
● Su tipo es VARRAY
● Son como arrays en cualquier otro lenguaje de programación
● Sólo tienen una dimensión
● A la hora de declararlos se declara su tipo máximo
● El array crece dinámicamente hasta alcanzar dicho tamaño
Arrays de longitud variable: declaración
entero positivo
constructores
Arrays de longitud variable: acceso
Arrays de longitud variable: asignación
mismo tipo
Arrays de longitud variable: extender
● EXTEND
● EXTEND(n)
● EXTEND(n,i)
● COUNT
● LIMIT
● FIRST
● LAST
● PRIOR
● NEXT
3.2.2. Tablas
anidadas
Tablas anidadas
● No tienen límite superior fijo
● Aumentan dinámicamente su tamaño
● Permiten borrar elementos individuales
Tablas anidadas: declaración
Tablas anidadas: acceso
IGUAL QUE LOS VARRAY
Tablas anidadas: algunas funciones
Tablas anidadas: ejemplo
Autoevaluación - Colecciones
App Kahoot!
3.3. Cursores
Cursores
● Un cursor no es más que una estructura que almacena el conjunto de filas
devuelto por una consulta a la base de datos.
● Existen cursores implícitos y explícitos
3.3.1. Cursores
implícitos
Cursores implícitos
● Oracle abre implícitamente un cursor para procesar cada sentencia SQL
que no esté asociada con un cursor declarado explícitamente.
● Con un cursor implícito no podemos usar las sentencias OPEN, FETCH y
CLOSE para controlar el cursor. Pero sí podemos usar los atributos del
cursor para obtener información sobre las sentencias SQL más
recientemente ejecutadas.
Cursores implícitos: atributos
● %FOUND : Después de que el cursor esté abierto y antes del primer
FETCH , %FOUND devuelve NULL . Después del primer FETCH , %FOUND
devolverá TRUE si el último FETCH ha devuelto una fila y FALSE en caso
contrario. Para cursores implícitos %FOUND devuelve TRUE si un INSERT ,
UPDATE o DELETE afectan a una o más de una fila, o un SELECT ... INTO ...
devuelve una o más filas. En otro caso %FOUND devuelve FALSE.
● %NOTFOUND : Es lógicamente lo contrario a %FOUND .
Cursores implícitos: atributos
● %ISOPEN : Evalúa a TRUE si el cursor está abierto y FALSE en caso
contrario. Para cursores implícitos, como Oracle los cierra
automáticamente, %ISOPEN evalúa siempre a FALSE .
● %ROWCOUNT : Para un cursor abierto y antes del primer FETCH ,
%ROWCOUNT evalúa a 0. Después de cada FETCH , %ROWCOUNT es
incrementado y evalúa al número de filas que hemos procesado. Para
cursores implícitos %ROWCOUNT evalúa al número de filas afectadas por
un INSERT , UPDATE o DELETE o el número de filas devueltas por un
SELECT ... INTO ...
3.3.2. Cursores
explícitos
Cursores explícitos
● Cuando una consulta devuelve más de una fila podemos gestionarlas con
un cursor declarado explícitamente.
Cursores explícitos: declaración
parámetro de entrada
Cursores explícitos: apertura (OPEN)
Cursores explícitos: recorrer filas (FETCH)
Cursores explícitos: cierre (CLOSE)
NOTA: Se puede volver a reabrir pero no realizar ninguna operación con el cursor.
Cursores explícitos: valor de los atributos
3.3.3. Cursores
variables
Cursores variables
● Oracle permite definir cursores variables, que son como punteros a
cursores.
● Son dinámicos y nos permiten referirnos a cualquier tipo de consulta.
Cursores variables: pasos para su uso
● Definir un tipo REF CURSOR y entonces declarar una variable de ese tipo.
● Abrir el cursor con OPEN-FOR en la parte de ejecución.
● Trabajar igual con el FETCH.
● Se cierra igual con CLOSE.
Cursores variables: ejemplo
Autoevaluación - Cursores
App Kahoot!
Ejercicios para practicar