트리거에서 트리거 연결된 테이블을 업데이트 질문입니다. 0 2 1,886

by df.karuna [Oracle 에러코드] ORA-04091 [2013.01.14 18:16:58]


com_scommit_member
이름   널     유형   
----------- -------- ------------
MEM_UID NOT NULL NUMBER   
SCOMMIT_CD  NOT NULL VARCHAR2(2) 
COUNTRY_CD  NOT NULL VARCHAR2(2) 
REGION_CD   NOT NULL VARCHAR2(3) 
DELEGATION    NUMBER   
WRITE_NM    NOT NULL VARCHAR2(50)
WRITE_DATE  NOT NULL DATE
UPDATE_NM   NOT NULL VARCHAR2(50)
UPDATE_DATE NOT NULL DATE

이 테이블에 대해서
delegation이 1이 되어서 들어오는 입력/수정이 있으면
scommit_cd가 같은 다른 데이터의 delegation을 0으로 돌리고 싶어서
다음과 같은 트리거를 만들었습니다.

create or replace
trigger TR_REMOVE_DELEGATION BEFORE
insert or update on com_scommit_member
FOR EACH ROW
BEGIN
  if :NEW.delegation = 1 and :NEW.delegation <> :OLD.delegation then
  UPDATE COM_SCOMMIT_MEMBER
  SET DELEGATION = 0
  WHERE DELEGATION = 1
  AND SCOMMIT_CD = :NEW.SCOMMIT_CD
  AND mem_uid <> :NEW.mem_uid;
  END IF;

END;

[ORA-04091: table is mutating, trigger/function may not see it] 이 에러가 발생하였습니다.


트리거 자신이 연결된 테이블에 업데이트를 걸면 안되는 것인가요?

by 손님 [2013.01.15 00:14:33]
http://database.sarang.net/?inc=read&aid=13361&criteria=oracle

위 글을 한번 살펴보심이 좋을 듯한데,

STATEMENT TRIGGER, ROW TRIGGER 에 대해 다시 한번 살펴보시고,
결론은 자기자신 테이블에도 트리거를 걸 수 있습니다.

by df.karuna [2013.01.15 10:00:37]

손님님(?) 감사합니다! 덕분에 해결이 잘 될거 같네요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입