[Oracle] 트리거 Trigger Example
Oracle 트리거 사용방법
트리거란 ?
테이블에 대한 이벤트(INSERT, UPDATE, DELETE)에 반응하여 자동으로 실행되는 작업
트리거 문법
- [OR REPLACE] : 등록된 트리거가 있을 경우, 새로 생성하는 트리거로 변경
- BEFORE or AFTER : 쿼리 트리거이벤트가 발생하기 전, 후 지정
- INSERT or UPDATE or DELETE : 트리거이벤트 유형을 지정
- [FOR EACH ROW] : 각 행에 대해 트리거를 실행여부를 지정
- [WHEN 조건] : 트리거가 실행되는 조건을 기입
- [DECLARE 변수 선언] : 트리거 내에서 사용할 변수를 선언
트리거이벤트 | OLD | NEW |
INSERT | X | O |
UPDATE | O | O |
DELETE | O | X |
- OLD 기존 데이터 (UPDATE, DELETE의 데이터)
- NEW 신 데이터 (INSERT, UPDATE의 데이터)
- :OLD.컬럼명 / :NEW.컬럼명
트리거 예시
테이블이 이벤트가 발생하였을 경우
CREATE OR REPLACE TRIGGER "TR_TEST_LOG"
AFTER DELETE OR INSERT ON TEST_TABLE
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO TEST_TABLE_LOG
(
COL_A
, COL_B
) VALUES (
, :NEW.COL_A
, :NEW.COL_B
)
;
ELSIF DELETING THEN
INSERT INTO TEST_TABLE_LOG
(
COL_A
, COL_B
) VALUES (
, :OLD.COL_A
, :OLD.COL_B
)
;
END IF;
END;
테이블의 컬럼에 이벤트가 발생하였을 경우
CREATE OR REPLACE TRIGGER "TR_TEST_LOG"
AFTER DELETE OR INSERT OR UPDATE OF T1, T2 ON TEST_TABLE
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO TEST_TABLE_LOG
(
COL_A
, COL_B
) VALUES (
, :NEW.COL_A
, :NEW.COL_B
)
;
ELSIF UPDATING THEN
DELETE FROM TEST_TABLE_LOG
WHERE COL_A = :NEW.COL_A
AND COL_B = :NEW.COL_B
;
INSERT INTO TEST_TABLE_LOG
(
COL_A
, COL_B
) VALUES (
, :OLD.COL_A
, :OLD.COL_B
)
;
ELSIF DELETING THEN
DELETE FROM TEST_TABLE_LOG
WHERE COL_A = :NEW.COL_A
AND COL_B = :NEW.COL_B
;
END IF;
END;