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;