Oracle/SQL/Triggers

< Oracle‎ | SQL

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ónEditar

  • BEFORE: Antes del evento
  • AFTER: Después del evento
  • INSTEAD OF: Para vistas

Eventos de DMLEditar

  • INSERT
  • UPDATE
  • DELETE

Cantidad de EjecucionesEditar

  • FOR EACH ROW: Se ejecuta una vez por cada registro afectado
  • Sin modificador: Se ejecuta una vez por operación

Registros :old y :newEditar

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 registrosEditar

WHEN (condición)

Se puede especificar campos de los registros old y new (en este caso sin el : inicial).

Deshabilitar y habilitar TriggersEditar

ALTER TRIGGER <nombre_trigger> DISABLE;
ALTER TRIGGER <nombre_trigger> ENABLE;

Error por Tabla mutanteEditar

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