트리거 사용시 질문이요~~!? ORA-04091 관련... 0 3 9,496

by 블루오션 [PL/SQL] 트리거 ORA-04091 [2016.04.05 13:52:04]


오라클 트리거를 사용할때 자기 자신의 테이블에는 사용 할 수 없는건지요??

A라는 테이블에 트리거를 걸어서 데이터가 INSERT 나 UPDATE 될때..

INSERT나 UPDATE된 데이터를 가지고  A 테이블의 특정 컬럼 3가지 데이터를 UPDATE 시켜 주려고 하는데..

ORA-04091 테이블이 변경되어 트리거/함수가 볼 수 없습니다. 에러가 나네요..

그래서 트리거를 호출해서 조건이 맞으면 프로시저를 호출 하여 처리 하려고 했는데...

그래도 같은 오류가 나네요 결국 같은 테이블의 트리거가 걸린건 프로시저를 다시 호출해도 

계속 뭔가 이어져서 ORA-04091 오류가 나게 되는건지요?  혹시 다른 좋은 방법이 있으시다면...

조언좀 부탁드립니다.

1. A 테이블(INSERT,UPDATE) -> 트리거 실행 ->  조건 만족 ->  A 테이블 컬럼 UPDATE

2. A 테이블(INSERT,UPDATE)-> 트리거 실행 -> 조건 만족-> 프로시저 호출 -> 프로시저상에서 A 테이블 컬럼 UPDATE 

위 2가지 방법으로 해봤는데 똑같은 오류가 나서요 ㅜㅜ 다른 방법 알고 계시면 조언좀 꼭 부탁드립니다.

 

 

 

by 마농 [2016.04.05 14:04:26]

UPDATE 를 하려고 해서 나는 에러입니다.
UPDATE 는 필요 없습니다.
그냥 해당 컬럼의 값만 변경해주면 됩니다.
    :NEW.컬럼 := '값';
이런 형태가 되겠죠.
단, 트리거 유형을 AFTER 로 하시면 안되고 BEFORE 로 하셔야 합니다.


by 블루오션 [2016.04.05 14:55:44]

마농님 답변 감사합니다.

그런데.. 하나더 궁금한점이... 그냥 값을 바로 :new.컬럼 에 입력해주면 들어가지긴하는데

그 넣어야 하는 데이터가  A 테이블에 입력된 값과 다른 B 테이블을 조인해서 결과 값을 가져와서 

다시 A 테이블의 특정 컬럼에 입력해야 하는데... 일단 Select 문이 들어가면 ORA-04091에러가 똑같이 나는군요..

 

 


by 마농 [2016.04.05 15:05:56]

조인도 불필요 할 듯 한데요?

B 테이블만 읽어서 가져오면 되는 것 아닌가요?

조인 조건 대신 :NEW.컬럼 을 조건으로 주면 되지 않나요?

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입