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
'programing' 카테고리의 다른 글
이 Firestore 쿼리에 인덱스가 필요한 이유는 무엇입니까? (0) | 2023.07.13 |
---|---|
eclipse 및 m2e와 함께 maven-jaxb-plugin을 사용할 때 ErrorListener가 누락됨 (0) | 2023.07.13 |
C에서의 구조 직렬화 및 MPI를 통한 전송 (0) | 2023.07.08 |
11g의 select 문에서 새로 생성된 테이블 열에 대한 기본값을 설정하는 방법 (0) | 2023.07.08 |
VBA에서 현재 디렉터리를 경로로 지정하는 방법은 무엇입니까? (0) | 2023.07.08 |