4

I have trigger for auditing, which stored the action performed on any row of EMP table.

This trigger works fine, except in some cases (which occurs very rarely, and I cannot identify exact condition) it gives me

Oracle Error: ORA-01400: cannot insert NULL into ("MY_SCHEMA"."HIST_EMP"."ACTION")

 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;

This generally happens when I am deleting the row, but I am not sure. Any thought on why this will be happening? The code looks ok to me...

shinobi92
  • 127
  • 2
  • 16
Aditya Jain
  • 1,077
  • 1
  • 12
  • 25

1 Answers1

1

Something weird is going on with variable v_action initialization, I guess. Try handling all 3 possibilities:

      v_action:= null;
      IF INSERTING THEN
           v_action := 'A';
      ELSIF UPDATING THEN
           v_action := 'U';
      ELSIF DELETING THEN
           v_action := 'D';
      END IF;
shinobi92
  • 127
  • 2
  • 16
David Jashi
  • 4,490
  • 1
  • 21
  • 26