programing

Oracle 및 트리거(삽입, 업데이트, 삭제)

oldcodes 2023. 7. 13. 21:05
반응형

Oracle 및 트리거(삽입, 업데이트, 삭제)

행을 삽입, 업데이트 또는 삭제할 때마다 실행되는 테이블에 대한 트리거를 사용하려고 합니다.

저는 다음과 같은 글을 썼습니다.

CREATE or REPLACE TRIGGER test001
  AFTER INSERT OR DELETE OR UPDATE ON tabletest001
  REFERENCING OLD AS old_buffer NEW AS new_buffer 
  FOR EACH ROW WHEN (new_buffer.field1 = 'HBP00') 

그리고 그것은 동작한다.행이 삽입, 업데이트 또는 삭제된 경우에도 동일한 작업을 수행하고 싶기 때문에 트리거에서 어떤 일이 발생하는지 알고 싶습니다.행이 삽입되었는지 업데이트되었는지 확인할 수 있을 것 같습니다(new_buffer로 old_buffer를 확인할 수 있습니다).행이 삭제되었는지 어떻게 알 수 있습니까?

트리거 사용에서:

트리거를 발생시킨 DML 작업 탐지

둘 이상의 DML 작업 유형이 트리거를 발생시킬 수 있는 경우(예: INSERT, DELETE 또는 UPDATE OF Emp_tab), 트리거 본문은 조건부 술어 INSERTING, DELETE 및 UPDATING을 사용하여 트리거를 발생시킬 문 유형을 확인할 수 있습니다.

그렇게

IF DELETING THEN ... END IF;

당신의 경우에 효과가 있을 것입니다.

코드를 이렇게 변경했는데 작동합니다.

CREATE or REPLACE TRIGGER test001
  AFTER INSERT OR UPDATE OR DELETE ON tabletest001
  REFERENCING OLD AS old_buffer NEW AS new_buffer 
  FOR EACH ROW WHEN (new_buffer.field1 = 'HBP00' OR old_buffer.field1 = 'HBP00') 

DECLARE
      Operation       NUMBER;
      CustomerCode    CHAR(10 BYTE);
BEGIN

IF DELETING THEN 
  Operation := 3;
  CustomerCode := :old_buffer.field1;
END IF;

IF INSERTING THEN 
  Operation := 1;
  CustomerCode := :new_buffer.field1;
END IF;

IF UPDATING THEN 
  Operation := 2;
  CustomerCode := :new_buffer.field1;
END IF;    

// DO SOMETHING ...

EXCEPTION
    WHEN OTHERS THEN ErrorCode := SQLCODE;

END;

NEW 값(또는 이름을 바꾼 NEW_BUFFER)은 삽입 및 업데이트할 때만 사용할 수 있습니다.DELETING의 경우 OLD(OLD_BUFFER)를 사용해야 합니다.트리거는 다음과 같습니다.

CREATE or REPLACE TRIGGER test001
  AFTER INSERT OR DELETE OR UPDATE ON tabletest001
  REFERENCING OLD AS old_buffer NEW AS new_buffer 
  FOR EACH ROW WHEN (new_buffer.field1 = 'HBP00' OR old_buffer.field1 = 'HBP00') 

필드 1을 'HBP000'에서 다른 항목으로 업데이트하는 코드를 충족하기 위해 트리거 내에 논리를 추가해야 할 수도 있습니다.

2개의 트리거로 분리합니다.하나는 삭제용이고 하나는 삽입용\업데이트용입니다.

언급URL : https://stackoverflow.com/questions/2965521/oracle-and-triggers-inserted-updated-deleted

반응형