본문 바로가기

DBMS

[ORACLE] TRIGGER 를 이용한 부모 테이블 수정/삭제

기본키를 외래키로 하여 부모-자식 관계에 있는 테이블들이 있을 때, 부모 테이블에서 데이터를 수정/삭제하면 자식 테이블의 데이터에도 적용되도록 하기 위한 방법으로 보통 CASCADE를 떠올린다. 하지만 오라클에서는 ON DELETE CASCADE 만 지원할 뿐 ON UPDATE CASCADE 를 지원하지 않으며 이미 테이블을 생성한 후일 경우 그리고 1:N의 관계로 맺어진 테이블의 개수가 아주 많을 경우 작업이 매우 번거로워진다.

그래서 적용할 수 있는 방법으로 TRIGGER가 있다. 

 

TRIGGER란?
DBMS에서 INSERT(입력), UPDATE(갱신), DELETE(삭제) 이벤트가 발생할 때 묵시적으로 수행되는 사용자 정의 PROCEDURE이다.

 

 

생성 구문은 아래와 같다.

CREATE OR REPLACE TRIGGER 트리거명1
AFTER UPDATE ON 테이블명            // 트리거 발생 시점과 이벤트
FOR EACH ROW                         // 행마다 처리
BEGIN                                // 실행구문 시작
   UPDATE CHILD_TBL1          
   SET ID = :NEW.ID                  // 변경 후 값
   WHERE ID = :OLD.ID;               // 변경 전 값
END;                                 // 실행구문 종료

 

line1. CREATE [OR REPLACE] : 트리거명이 존재할 경우 새로 생성하여 대체한다.

line2. BEFORE / AFTER : 이벤트가 발생하는 시점을 결정한다. (전/후)

        INSERT / UPDATE / DELETE : 이벤트 유형을 결정한다.

line3. [FOR EACH ROW] : 트리거를 행마다 적용할 것인지를 결정한다.

line4~8. BEGIN~END : 실행 구문

 

트리거가 발생하는 조건을 추가하고 싶다면 FOR EACH ROW 다음절에 WHERE 절을 추가하면 된다.

 

생성한 트리거를 삭제할 경우

DROP TRIGGER 트리거명;