DB/Oracle

[Oracle] 트리거 생성 방법

멍목 2021. 8. 27. 20:21
반응형

안녕하세요 이번 포스팅에서는 트리거에 대해 작성하려고 합니다.

 

 

트리거란 : 특정 이벤트(INSERT/UPDATE/DELETE)가 발생하면 자동적으로 수행되는 PL/SQL 종류 중 하나입니다.

트리거를 이용한다면, 특정 데이터가 조작될 경우 그와 연계된 데이터까지 조작할 수 있는 기능이라고 볼 수 있습니다.

 


트리거 생성 문법

 

CREATE [OR REPLACE] TRIGGER 트리거명
BEFORE or AFTER
INSERT or UPDATE or DELETE ON 테이블명 
[FOR EACH ROW]
[WHEN 조건]
[DECLARE 변수 선언]

BEGIN

      트리거 본문 코드

END;


[OR REPLACE] : 해당 트리거 명으로 등록된 트리거가 있을 경우, 새로 생성하는 트리거로 대체한다.

BEFORE or AFTER : 이벤트가 발생하기 전 후를 지정한다.

INSERT or UPDATE or DELETE : 이벤트 유형을 지정한다.

[FOR EACH ROW] : 각 행에 대해 트리거를 적용할 지를 지정한다.

[WHEN 조건] : 트리거가 실행되는 조건을 기입한다.

[DECLARE 변수 선언] : 트리거 내에서 사용할 변수를 선언한다.

 

 

생성 트리거 예시 

-- 트리거 생성
CREATE OR REPLACE TRIGGER TRRIGER_NAME
AFTER UPDATE ON "TABLESPACE_NAME"."TABLE_NAME"
FOR EACH ROW 
WHEN (old.COLUMN1 = 'N' AND new.COLUMN1 = 'Y')
DECLARE
  V_COLUMN2 DATE;
  V_COLUMN3 VARCHAR2(20);
  V_COLUMN4 VARCHAR2(20);
  V_COLUMN5 VARCHAR2(3);
  V_COLUMN6 VARCHAR2(4);
  V_COLUMN7 VARCHAR2(4);
BEGIN
  V_COLUMN2 := :NEW."COLUMN2";
  V_COLUMN3 := :NEW."COLUMN3";
  V_COLUMN4 := :NEW."COLUMN4";
  V_COLUMN5 := :NEW."COLUMN5";
  V_COLUMN6 := :NEW."COLUMN6";
  V_COLUMN7 := :NEW."COLUMN7";
  
  UPDATE  "TABLESPACE_NAME"."TABLE_NAME"
  SET     COLUMN8 = 'N',
          COLUMN2 = V_COLUMN2,
          COLUMN3 = V_COLUMN3,
          COLUMN4 = COLUMN4 + 1
  WHERE   COLUMN5 = V_COLUMN5
          AND COLUMN6 = V_COLUMN6
          AND COLUMN7 = V_COLUMN7
          AND COLUMN8 = 'Y';
END TRRIGER_NAME;

-- 트리거 삭제
DROP TRIGGER TRRIGER_NAME;

-- 트리거 조회
SELECT *
FROM USER_TRIGGERS

old는 수정 전의 데이터

new는 수정 후의 데이터 입니다.

반응형