본문 바로가기

DB/Oracle

오라클 ORA-04091 오류 대처

Oracle 의 ora-04091 에러는 


변경이 가해지고 있는 테이블 (mutating table) 에 row level trigger를 처리할때

mutating table의 access를 허용하지 않아 에러가 발생한다.


무슨 말이냐


trigger 문법을 보면


CREATE OR REPLACE TRIGGER TRIGGER_NAME

AFTER DELETE OR INSERT ON TABLE

FOR EACH ROW

BEGIN


트리거 본문


END;   


이렇게 된다.


트리거 본문에서 ===========> ON TABLE


ON 절에 쓰인 테이블은 트리거 본문에 쓰일수 없다.


무한루프 와 같은 이상 현상을 유발할 수 있다고 오라클에서 막았다.


따라서



백업테이블을 만들어서 사용할 수 있다.


A 테이블

B 테이블

백업 A 테이블


A 테이블 변경시 백업 A 테이블에 데이터 입력


백업 A 테이블 변경 시 A 테이블의 데이터 검색 해서 B 테이블에 입력


이 방법 외에 패키지를 만들고 안에 mutating table의 정보를 담을 변수들과 flag 정보를 담을 변수를 생성하여 처리하는 방법이 있다.


난 첫번째 방법이 더 간단해서 저렇게 처리하였는데 패키지를 만들어서 처리하는 방법도 괜찮은 방법이니 참고 하도록 하세요. 


(설명은 반말.. 의견전달은 존댓말... 혼란을 야기해서 죄송합니다. ^^ 애교로 봐주세요.)



참조 사이트: http://cafe.naver.com/xlsvba/8990