una trigger tablas tabla para genérico cambios auditoria auditar oracle triggers auditing

oracle - trigger - El disparador no puede inicializar la variable



trigger genérico para auditar cambios en una tabla oracle (1)

Tengo el disparador para la auditoría, que almacenó la acción realizada en cualquier fila de la tabla EMP.

Este disparador funciona bien, excepto en algunos casos (que ocurre muy raramente, y no puedo identificar la condición exacta) que me da

Error de Oracle: ORA-01400: no se puede insertar NULL en ("MY_SCHEMA". "HIST_EMP". "ACCIÓN")

CREATE OR REPLACE TRIGGER HIST_EMP_AIUD AFTER UPDATE OR INSERT OR DELETE ON EMP REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW DECLARE v_action VARCHAR2(1) := ''D''; BEGIN IF INSERTING THEN v_action := ''A''; ELSIF UPDATING THEN v_action := ''U''; END IF; IF DELETING THEN INSERT INTO hist_emp (source_rowid, source_date, action) VALUES (:old.rowid, SYSDATE, v_action); ELSIF INSERTING OR UPDATING THEN INSERT INTO hist_emp (source_rowid, source_date, action) VALUES (:new.rowid, SYSDATE, v_action); END IF; EXCEPTION WHEN OTHERS THEN --Code to Log -- <some exception handling should be placed here > END;

Esto generalmente sucede cuando elimino la fila, pero no estoy seguro. ¿Alguna idea de por qué esto va a estar sucediendo? El código se ve bien para mí ...


Algo extraño está sucediendo con la inicialización variable v_action , supongo. Intenta manejar las 3 posibilidades:

v_action:= null; IF INSERTING THEN v_action := ''A''; ELSIF UPDATING THEN v_action := ''U''; ELSIF DELETING THEN v_action := ''D''; END IF;