Triggers_II

Páginas: 11 (2521 palabras) Publicado: 11 de marzo de 2016
Apuntes PL-SQL

Triggers II

Tipos de datos compuestos
Registros PL/SQL:


Son similares a un tipo struct en C o a un tipo Registro en otros 3GL.



Se componen de otros datos más simples.



Son adecuados para recuperar una fila de datos de una tabla, pero
pueden usarse para crear arrays de estructuras.



A cada campo se le puede asignar un valor inicial y pueden definirse
como NOT NULL.

Ya hemos usado registros cuando hemos declarado variables usando
%ROWTYPE.

Definición de Registros en
PL/SQL


La sintaxis para crear un tipo registro es la siguiente:

TYPE NombreTipoDatos IS RECORD
(
NombreCampo TipoCampo [NOT NULL] [:= ValorInicial],
NombreCampo TipoCampo [NOT NULL] [:= ValorInicial],

);


En TipoCampo se puede usar %TYPE.



Una vez creado este tipo de datos, yapueden declararse
variables de este tipo (igual que con las struct de C).

Definición de Registros en
PL/SQL


La definición de tipos de datos compuestos y la declaración de variables del nuevo tipo se
realizan en la zona de declaraciones del bloque PL/SQL, así:

DECLARE
TYPE TipoRegEmpleado IS RECORD
(
nombre emp.ename%TYPE,
oficio
emp.job%TYPE,
salario
emp.sal%TYPE
);
registroempleadoTipoRegEmpleado;

Para referirnos a cada parte de una variable tipo registro usaremos la sintáxis:
nombrevariable.nombrecampo

Arrays o tablas PL


No tienen nada que ver con las tablas de la base de datos, son
tablas que se guardan en memoria.



Es similar al concepto de array en C.



Tienen dos partes: el índice o clave y los datos, que pueden ser
de tipo simple o de tipo registro.



El índiceno tiene porque ser secuencial y los elementos no se
guardan contiguos en memoria (se parece más a una lista que a
un array). Además, no tienen una dimensión predeterminada,
pueden crecer en tiempo de ejecución.

Declaración de tablas PL


Se hace en dos pasos: Primero se crea un
tipo de datos Tabla y luego se declaran
variables de ese tipo, así:

--Declaro el tipo
TYPETipoTablaNombresEmpleados IS TABLE OF emp.ename%TYPE
INDEX BY BINARY_INTEGER;
-- Declaro la variable
MiTabla TipoTablaNombresEmpleados;

Operaciones con tablas PL


Un elemento se crea cuando se le asigna un valor, así:
MiTabla(8):=‘SMITH’;
crea el elemento de índice 8 de la tabla. Los índices pueden ser negativos o
positivos.



Para referirnos a un elemento, ponemos el índice entre paréntesis tras el
nombre de latabla.



Si intento leer un elemento de la tabla que no existe, se levanta una excepción
NO_DATA_FOUND



Para trabajar con tablas, existen una serie de métodos que nos permiten
realizar todas las operaciones necesarias, se llaman con la sintaxis habitual:
NombreTabla.NombreMétodo(parámetros)

Métodos de las tablas PL


Son los siguientes:











EXISTS(n): Devuelve TRUE si existeel elemento n.
COUNT: Devuelve el número de elementos de la tabla.
FIRST: Devuelve el índice del primer elemento.
LAST: Devuelve el índice del último elemento.
PRIOR: Devuelve el índice del elemento anterior. Si ya
está en el primero devuelve NULL
NEXT: Devuelve el índice del elemento siguiente. Si ya
está en el último devuelve NULL
DELETE: Borra todos los elementos.
DELETE(n): Borra el elementode índice n.

Ejemplo de creación y recorrido de una tabla PL
TYPE tEmpleados IS RECORD
(
NUMEMP EMP.EMPNO%TYPE,
NUMDEPT
EMP.DEPTNO%TYPE,
PUESTO
EMP.JOB%TYPE,
JEFE
EMP.MGR%TYPE
);
TYPE tTablaEmpleados IS TABLE OF tEmpleados
INDEX BY BINARY_INTEGER;
empleados tTablaEmpleados;
i NUMBER;
BEGIN
rellenar_tabla(empleados);
FOR i IN empleados.FIRST..empleados.LAST LOOPDBMS_OUTPUT.PUT_LINE(empleados(i).numemp||empleados(i).numdept);
END LOOP;
END;

Ejemplo de uso de una tabla
Veamos como sería el procedimiento rellenartabla, que rellena una tabla PL a
PL
partir de una tabla de la base de datos:


DECLARE
CURSOR c_empleados IS
SELECT EMPNO, DEPTNO, JOB, MGR FROM EMP;
I NUMBER:=0;
v_emp empleados%ROWTYPE;
BEGIN
OPEN empleados;
FETCH c_empleados INTO v_emp;
WHILE c_empleados%FOUND LOOP...
Leer documento completo

Regístrate para leer el documento completo.

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS