Triggers Datos
Triggers Datos
Triggers Datos
Triggers de Datos
Triggers
• ¿Qué son?
Bloques de código PL-SQL que se ejecutan
automáticamente cuando se produce un evento.
• Tipos de triggers.
– Aplicación: Asociados a un evento del interfaz de
usuario (clic de un botón, pérdida de foco…). Se usan
en Oracle Developer.
– Datos: Asociados a una modificación de los datos
que hay en las tablas: INSERT, UPDATE o DELETE.
– Sistema: Asociados a un evento del sistema. (Login,
Error del Servidor, Arranque de la BD, etc…).
Creación de triggers de datos
• Momento: BEFORE o AFTER o INSTEAD OF.
• Evento: INSERT ó UPDATE ó DELETE
• Nombre Tabla: On NombreTabla
• Tipo de Disparo: Por fila o por sentencia.
• Condición de disparo: Claúsula WHEN.
(sólo en triggers por fila).
• Cuerpo del trigger: DECLARE
BEGIN
END;
Elementos de un trigger
• Momento: ¿Cuándo se va a disparar?
BEFORE: Antes de la instrucción DML, indicado
si el trigger sirve para comprobar si la operación
DML debe hacerse o no.
AFTER: Si queremos que la sentencia se
ejecute antes que el trigger y además no se
prevee que el trigger vaya a hacer fallar la
sentencia.
INSTEAD OF: Solo para modificar vistas que no
son actualizables directamente.
Elementos de un trigger
• Evento: ¿Por qué se ejecuta el trigger?
• INSERT
• UPDATE ( de cualquier columna o de
algunas en concreto).
• DELETE
• Combinación de las anteriores.
Elementos de un trigger
• Tipo de Disparo: ¿Cuántas veces se va a
disparar cuando se produce el evento?
DECLARE
BEGIN
EXCEPTION
END;
BeforeRow
7839 KING 1200 30
AfterRow
BeforeRow
7698 BLAKE 2100 30
AfterRow
BeforeRow 7788 SMITH 2300 30
AfterRow
AfterStatement
Uso de predicados condicionales
• Cuando un trigger puede ser disparado por
varias operaciones distintas, hay una forma de
saber dentro del código del trigger cual de ellas
lo disparó, se llaman predicados condicionales y
se usan así:
• IF INSERTING THEN…
• IF UPDATING [(‘nombreColumna’)] THEN…
• IF DELETING THEN…
Ejemplos de Triggers
• Supongamos que queremos hacer un trigger que impida
insertar datos en la tabla emp fuera del horario normal
de oficina.
BEGIN
END;
/