트리거 after update 시에 delete하려면? 0 2 1,981

by 짱짱 [PL/SQL] [2010.09.01 17:08:46]


안녕하세요.

소스레벨의 수정이 없도록 DB에서만 처리를 하려하니 부득이하게 트리거를 이용해야합니다.

특정필드(탈퇴여부)가 'N'로 변경이되면, delete를 하고 싶은데요.

'테이블이 변경되어 트리거가 볼수 없다'는 에러를 내네요.

방법이있을까요?

create or replace trigger TB_LOGIN_UPD_AF
  after update on tb_login 
  for each row
declare
 
begin

  dbms_output.put_line('==> UPDATE');
 
  -- 탈퇴요청이면
  IF :new.memdelpart = 'N' THEN
    dbms_output.put_line('-- 탈퇴 :delete');
DELETE FROM TB_LOGIN
WHERE memid = :old.memid;
 
  END IF;
 
end TB_MEMBER_LOGIN_UPD_AF;

감사합니다. (__)

by 마농 [2010.09.01 17:25:56]
어차피 N 인 행을 남겨두지 않고자 함이라면?
행단위 트리거가 아닌 문장 단위 트리거로 하면 될듯 합니다.

CREATE OR REPLACE TRIGGER tb_login_upd_af
AFTER UPDATE ON tb_login
-- FOR EACH ROW -- 이부분을 없애면 문장 트리거
BEGIN

DELETE FROM tb_login
WHERE memdelpart = 'N'
;

END;

by 짱짱 [2010.09.01 17:52:54]
마농님! 감사합니다.

행단위와 문장단위 차이를 알겠네요. ^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입