--* 테이블
CREATE TABLE TEMP_OH(TEMP1 VARCHAR2(10),TEMP2 VARCHAR2(10));
--------------------------------------------------------------
--* 트리거 생성
CREATE OR REPLACE TRIGGER TRG_TEMP_OH
BEFORE INSERT ON TEMP_OH FOR EACH ROW
DECLARE
VC_TEMP VARCHAR2(1000);
BEGIN
BEGIN
SELECT TEMP1
INTO VC_TEMP
FROM TEMP_OH A
WHERE ROWNUM < 2 -- INSERT 바로전에 들어간 행 보려고할때
;
EXCEPTION WHEN NO_DATA_FOUND THEN
VC_TEMP := NULL;
END;
END TRG_TEMP_OH;
/
이렇게 했는데요,...
INSERT INTO TEMP_OH(TEMP1,TEMP2) VALUES('1','2');
위 문장을 실행하면 괜찮지만
INSERT INTO TEMP_OH(TEMP1,TEMP2)
SELECT '1','2' FROM DUAL;
요런식으로 하면
MUTATING ERROR 가 나더군요,,
원래는 AFTER-FOR EACH ROW 트리거 였으나,
AFTER 는 트리거에서 자신 테이블을 참조하면 MUTATING ERROR 에러가 나서
BEFORE 방식으로 했으나
역시 INSERT ~ SELCT 식의 INSERT 문장은 어김없이 오류가 나네요 ㅜㅜ
왜 오류가 날까요?
해결책이 있을까요? ㅜㅜ
트리거 안에서 PRAGMA AUTONOMOUS_TRANSACTION; 선언하여
트렌젝션을 분리시키면 될 듯 하나 이또한 트렌젝션이 분리되서 SELECT 에서 잘못된 값을 보고 있을거 같고요,,