'ORA-04088: error during execution of trigger' 오류는 메시지에서 안내하는 바와 같이 트리거 실행과 관련이 있는데요, 보통 단독으로 발생하지는 않고 연쇄적으로 문제가 발생하여 나타나는 편입니다.
ORA-04088: error during execution of trigger
특히 ORA-04088 오류는 트리거 실행 중, 런타임 에러가 발생할 때 나타나는데요, 주로 발생하는 경로는 트리거 내에서 대상 테이블을 다시 호출하여 무한 루프에 빠지게 되는 상황이 많아요.
원인
오류 원인? 트리거 내에서 동일한 테이블에 대해 INSERT, 또는 UPDATE 작업을 수행할 때 발생합니다. 이로 인해 트리거가 반복적으로 호출되어 무한 루프가 되는 경우에 문제가 된답니다.
예제 (잘못된 트리거)
다음 예시는 {EMP} 테이블에서 BEFORE INSERT 트리거가 동일한 테이블에 대해 INSERT 작업을 계속 수행하여 오류가 발생하는 상황을 만들어 보았어요.
CREATE OR REPLACE TRIGGER emp_before_insert
BEFORE INSERT ON EMP
FOR EACH ROW
BEGIN
-- 트리거 내에서 동일한 테이블에 INSERT 작업을 수행하여 오류 발생 예상
INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES (:NEW.EMPNO + 1, 'NEW_EMP', 'CLERK', :NEW.MGR, SYSDATE, :NEW.SAL, :NEW.COMM, :NEW.DEPTNO);
END;
/
Trigger created.
이제, {EMP} 테이블에 데이터를 인서트 하면 어떻게 될까요? 트리거가 동일한 테이블에 대해 INSERT 작업을 수행하는 문제가 생길 것입니다.
INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES (1, 'BEOMSANG', 'CLERK', 7902, SYSDATE, 1000, NULL, 20);
ERROR at line 1:
ORA-00036: maximum number of recursive SQL levels (50) exceeded
ORA-06512: at "USER_NAME.EMP_BEFORE_INSERT", line 3
ORA-04088: error during execution of trigger 'USER_NAME.EMP_BEFORE_INSERT'
ORA-06512: at "USER_NAME.EMP_BEFORE_INSERT", line 3
ORA-04088: error during execution of trigger 'USER_NAME.EMP_BEFORE_INSERT'
ORA-06512: at "USER_NAME.EMP_BEFORE_INSERT", line 3
ORA-04088: error during execution of trigger 'USER_NAME.EMP_BEFORE_INSERT'
ORA-06512: at "USER_NAME.EMP_BEFORE_INSERT", line 3
ORA-04088: error during execution of trigger 'USER_NAME.EMP_BEFORE_INSERT'
ORA-06512: at "USER_NAME.EMP_BEFORE_INSERT", line 3
ORA-04088: error during execution of trigger 'USER_NAME.EMP_BEFORE_INSERT'
ORA-06512: at "USER_NAME.EMP_BEFORE_INSERT", line 3
ORA-04088: error during execution of trigger 'USER_NAME.EMP_BEFORE_INSERT'
ORA-06512: at "USER_NAME.EMP_BEFORE_INSERT", line 3
ORA-04088: error during execution of trigger 'USER_NAME.EMP_BEFORE_INSERT'
ORA-06512: at "USER_NAME.EMP_BEFORE_INSERT", line 3
해결 방법
ORA-04088: error during execution of trigger 오류는 직접적인 문제가 아니라, 런타임 에러 상태를 보여주는 코드입니다. 그러므로 이를 해결하기 위해 오류의 전, 후 컨텍스트에서 안내하는 문구를 다시 확인해 주세요. 그 곳에 답이 있답니다. 😊
