Trigger

트리거(Trigger)란 DML(INSERT, UPDATE, DELETE )문이 테이블에 수행됐을 때, 자동으로 수행되는 프로시져이다.

CREATE [OR REPLACE] TRIGGER 트리거명
[BEFORE | AFTER] triggering-event[Insert,delete,update] ON 테이블명
[Referencing OLD AS {변경전 값을 참조하는 변수명} NEW AS {변경 후 값을 참조하는 변수명}]
[FOR EACH ROW]
[WHEN (condition)]
DECLARE
--변수선언
BEGIN
--트리거 PL/SQL 명령 작성
EXCEPTION
END;
  • BEFORE : DML문이 실행되기 전에 트리거 실행

  • AFTER : DML문이 실행된 후 트리거 실행

  • triggering-event는 insert, delete, update 중에서 한 개 이상 올 수 있음.

  • [Referencing OLD AS {변경전 값을 참조하는 변수명} NEW AS {변경 후 값을 참조하는 변수명}]

    • :OLD 는 참조 전 열의 값(변화전 값)

    • :NEW는 참조 후 열의 값(변화된 값)

  • FOR EACH ROW : 해당 옵션이 있으면, 행 트리거가 된다.

    • 행 트리거(Row-Level Triggers) : 컬럼의 각각 행의 데이터 변화가 생길때마다 실행되며, 그 데이터 행의 실제값을 제어 가능

    • 문장 트리거(Statement-Level Triggers) : 트랜잭션내에서 한번만 수행되며, 컬럼의 각 데이터 행을 제어 불가

특징

  • 트리거 내에서는 commit, rollback을 수행할 수 없다.

  • 트리거는 각 테이블에 최대 3개까지 가능하며, 이미 정의된 작업에 대해 다른 트리거를 정의하면 기존의 것을 대체한다.

  • 뷰나 임시 테이블은 참조할 수 있으나, 생성 할 수 없다.

  • 트리거 동작은 트리거를 삭제할 때까지 작동한다.

상태 확인

SELECT TABLE_NAME, STATUS FROM 트리거명;

상태변경 및 재 컴파일

  • 해당 트리거의 활성/비활성 상태 변경

ALTER TRIGGER 트리거명 {ENABLE/DISABLE};
  • 해당 테이블에 있는 모든 트리거의 활성/비활성 상태 변경

    ALTER TABLE 테이블명 {ENABLE/DISABLE} FROM TRIGGERS;
  • 트리거 내용이 변경되거나, 제대로 작동안하는 경우 재컴파일

ALTER TRIGGER 트리거명 COMPILE;

삭제

DROP TRIGGER 트리거명;

참조

Last updated