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 정보를 담을 변수를 생성하여 처리하는 방법이 있다.
난 첫번째 방법이 더 간단해서 저렇게 처리하였는데 패키지를 만들어서 처리하는 방법도 괜찮은 방법이니 참고 하도록 하세요.
(설명은 반말.. 의견전달은 존댓말... 혼란을 야기해서 죄송합니다. ^^ 애교로 봐주세요.)
'DB > Oracle' 카테고리의 다른 글
SQL Function (0) | 2016.02.04 |
---|---|
유니코드(UTF-8) 한글 코드표, 한글코드 범위 {AC00-D7AF} (0) | 2016.02.04 |
oracle user 계정 만료 기간 무제한 설정 (0) | 2016.02.04 |
chang archivelog path (0) | 2016.02.04 |
오라클 ORA-04091 오류 대응 트리거 (0) | 2016.02.04 |