Oracle/SQL/Triggers
Apariencia
Son procedimientos de PL/SQL que se ejecutan automáticamente cuando se produce un evento determinado.
CREATE OR REPLACE TRIGGER nombre {BEFORE | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE} [of columna, ...] ON tabla [FOR EACH ROW] [WHEN (condiciones)] [declare -- Declaraciones del Trigger ... ] begin -- Código del Trigger ... end;
NOTA: Las {} encierran elementos alternativos, no son parte de la sintaxis.
Momento de Ejecución
[editar]- BEFORE: Antes del evento
- AFTER: Después del evento
- INSTEAD OF: Para vistas
Eventos de DML
[editar]- INSERT
- UPDATE
- DELETE
Cantidad de Ejecuciones
[editar]- FOR EACH ROW: Se ejecuta una vez por cada registro afectado
- Sin modificador: Se ejecuta una vez por operación
Registros :old y :new
[editar]Estos registros contienen los valores anteriores y posteriores a la operación.
En triggers tipo BEFORE, se puede modificar los valores de :new.
Filtro de registros
[editar]WHEN (condición)
Se puede especificar campos de los registros old y new (en este caso sin el : inicial).
Deshabilitar y habilitar Triggers
[editar]ALTER TRIGGER <nombre_trigger> DISABLE;
ALTER TRIGGER <nombre_trigger> ENABLE;
Error por Tabla mutante
[editar]Cuando se consulta en un trigger de tipo FOR EACH ROW una tabla que está siendo afectada por la operación que disparó el trigger, se produce el error:
ORA-04091: table <owner>.<nombre_tabla> is mutating, trigger/function may not see it