마스터 테이블에서 변경이 발생하면 트리거를 사용하여 감사 내역 테이블에 이전 값과 새 값을 삽입합니다.이전 값이 null 인 경우 트리거가 실행되지 않음
create or replace TRIGGER audit_trg
BEFORE UPDATE ON Employee
FOR EACH ROW
BEGIN
IF(UPDATING('E_AGE'))
THEN
IF(NVL(:OLD.E_AGE,0)!=NVL(:new.E_AGE,0))
THEN
INSERT INTO AUDIT_TRAIL(ID,PRIMARY_KEY,TABLENAME,COLUMNNAME,OLDVALUE,NEWVALUE,UPDATEDDATETIME,UPDATEDBY ,DESCRIPTION)
VALUES(AUDIT_TRAIL_SEQ.NEXTVAL,:new.ID,'Employee','E_AGE',NVL(:OLD.E_AGE,0),:new.E_AGE,sysdate, :new.UPDATEDBY,:new.DESCRIPTION);
END IF;
END IF;
END;
그러나 이전 값이 null 인 경우에만 감사 내역 테이블에 값을 삽입하지 않습니다.
시도했지만 여전히 값을 삽입하지 않습니다. –
무엇을 말 할 지 모르겠습니다. 내 테스트를 참조하십시오. – TommCatt
가능성 : (1) NULL 값을 0으로 업데이트하면 조건은 FALSE로 평가되고 감사 레코드가 삽입되지 않습니다. (2) 여러 세션을 사용하는 경우 감사 로그를 쿼리하기 전에 업데이트 트랜잭션이 커밋되었는지 확인하십시오. 트리거의 삽입은 업데이트와 동일한 트랜잭션에서 발생합니다. –