Oracle/SQL/Triggers

De Wikilibros, la colección de libros de texto de contenido libre.
< 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ó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