TRIGGERS
Lic. Cristian Mercado Quispe
Carrera de Ingeniería de Sistemas -
UPEA
TRIGGERS = DISPARADOR
• Un Trigger es un bloque con nombre almacenado
como un objeto de la base de datos y se ejecuta
implícitamente cuando ocurre un evento en
particular.
• Un trigger es un bloque PL SQL que no se llama
directamente, sino que son provocados por los
acontecimientos en la base de datos, que se
ejecuta como consecuencia de una determinada
instrucción SQL (una operación DML: INSERT,
UPDATE o DELETE) sobre dicha tabla.
TRIGGERS
Se puede crear un trigger para los siguientes eventos:
• Una Sentencia DML(Insert, update, delete) ejecutada
sobre una tabla de la base de datos.
• Una sentencia DDL (CREATE, ALTER, DROP, etc) ejecuta
sobre algún esquema o por cualquier usuario.
• Evento del sistema como la inicialización o paralización
de la instancia (Startup/Shutdown)
• Evento de usuario como la creación de una sesión por
parte de un usuario de la base de datos.
SINTAXIS
CREATE OR REPLACE TRIGGER nombre_trigger
{BEFORE | AFTER} evento_trigger ON nombre_objeto
[FOR EACH ROW]
[ENABLE|DISABLE]
[WHEN condición]
DECLARE
BEGIN
EXCEPTION
END;
/
Orden de ejecución de los Triggers
• Si existe, se ejecuta el disparador de tipo BEFORE
(disparador previo) con nivel de sentencia.
Para cada fila a la que afecte la orden:
– Se ejecuta si existe, el disparador de tipo BEFORE con
nivel de fila. o Se ejecuta la propia orden.
– Se ejecuta si existe, el disparador de tipo AFTER
(disparador posterior) con nivel de fila.
• Se ejecuta, si existe, el disparador de tipo AFTER
con nivel de sentencia.
• INSERT, DELETE, UPDATE
Define qué tipo de orden DML provoca la activación del disparador.
• BEFORE,AFTER
Define si el disparador se activa antes o después de que se ejecute
la orden.
• FOR EACH ROW
Los disparadores con nivel de fila se activan una vez por cada fila
afectada por la orden que provocó el disparo. Los disparadores con
nivel de orden se activan sólo una vez, antes o después de la orden.
Los disparadores con nivel de fila se identifican por la cláusula FOR
EACH ROW en la definición del disparador.
Las variables :NEW y :OLD
• Estas variables hacen referencia a los valores
nuevos y anteriores de las filas involucradas en la
operación que dispara un Trigger.
• Para UPDATE, old se refiere al valor de la fila
antes de la modificación y new al valor después
de la modificación.
• Para una inserción solo tiene sentido la variable
new.
• Para una eliminación sólo tiene sentido la
variable old.
PREDICADOS INSERTING, UPDATING,
DELETING
• INSERTING
TRUE si la orden de disparo es INSERT, FALSE en
otro caso.
• UPDATING
TRUE si la orden de disparo es UPDATE, FALSE en
otro caso.
• DELETING
TRUE si la orden de disparo es DELETE, FALSE en
otro caso.
Uso de Triggers
• Hacer cumplir complejas reglas de negocio que
no se pueden definir utilizando integridad
referencial.
• Mantener reglas de seguridad complejas
• Generar valores automáticos para columnas
derivadas
• Recolectar información estadística sobre acceso a
tablas
• Prevenir transacciones inválidas
• Proveer pistas de auditoria.
EJEMPLOS – TRIGGERS PARA
AUDITORIAS
• Crear la tabla estudiante:
CREATE TABLE estudiante(
id_estudiante NUMBER(8,0) PRIMARY KEY,
nombre VARCHAR2(25) NOT NULL,
apellido VARCHAR2(25),
modificado_por VARCHAR2(30),
fecha_modificacion DATE
);
CREATE SEQUENCE seq_estudiante;
• Crear un TRIGGER denominado
AAI_ESTUDIANTE para la tabla ESTUDIANTE,
que se active antes de INSERTAR Y
ACTUALIZAR un registro. El trigger deberá
registrar el usuario que modifica el registro y
la fecha de modificación.
EJEMPLOS – TRIGGERS PARA GENERAR
PISTAS DE AUDITORIA
CREATE TABLE LOG_AUDITORIA(
TABLA VARCHAR2(30),
USUARIO VARCHAR2(30),
FECHA_TRANSACCION DATE,
OPERACION VARCHAR2(30)
);
EJEMPLOS – TRIGGERS PARA GENERAR
PISTAS DE AUDITORIA
• Crear un TRIGGER denominado
LOG_AUDITORIA_ESTUDIANTE que permita
registrar las operaciones DML(INSERT,
UPDATE,DELETE) realizadas sobre la tabla
ESTUDIANTE.
EJEMPLO
• Crear un trigger denominado
AAIE_RESTRINGE_ESTUDIANTES que se ejecute
antes de INSERTAR, ACTUALIZAR Y ELIMINAR
materias. El trigger deberá restringir las
operaciones de acuerdo a los sgtes tiempos:
Las eliminaciones de materias están permitidas sólo
a partir de 8:00am hasta las 9:00 am.
Las inserciones y actualizaciones de materias están
permitidas a partir de hrs. 14:00 hasta las 18:00