트리거(Trigger)

- 특정 테이블에 INSERT,UPDATE,DELETE와 같은 DML문이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램

- 사용자가 직접 호출하여 사용하는 것이 아니라 데이터베이스에서 자동적으로 수행

- 테이블과 뷰, 데이터베이스 작업을 대상으로 정의할 수 있으며, 전체 트랙잭션 작업에 대해 발생되는 트리거와 각행에 대해 발생되는 트리거가 있다.

 

트리거(Trigger) 종류

- 문장 트리거

  트리거가 설정된 테이블에 트리거 이벤트가 발생하면 많은 행에 대해 변경 작업이 발생하더라도 오직 한번만 트리거를 발생시키는 방법이다. 컬럼값이 변화가 생길때마다 스스로 알아서 실행 된다. (FOR EACH ROW 옵션X)

 -> "UPDATE oracleStudy SET grade = grade + 10;" 이런 문장이 실행됨으로 여러행이 변경될경우 트리거는 단 한번만 실행된다.

 

- 행 트리거

 : 조건을 만족하는 여러 개의 행에 대해 트리거를 반복적으로 여러번 수행하는 방법으로

[FOR EACH ROW WHEN 조건] 절로 정의된다. 컬럼의 데이터 행이 변화가 오면 실행된다. 변경 후의 행은 OLD 와 NEW를 통해 가져올 수 있다. (FOR EACH ROW 옵션 O)

 

트리거(Trigger) 사용방법

CREATE [ OR REPLACE ]TRIGGER 트리거명
BEFORE | AFTER [동작(INSERT,UPDATE,DELETE)] ON 테이블명 // 테이블에 이벤트 발생 
[ FOR EACH ROW ] // 실행될 문장 행에 각각 적용
[ DECLARE ] //변수선언
변수1  테이블명.컬럼명%TYPE;
변수2  테이블명.컬럼명%TYPE;
[ WHEN 조건식 ]
BEGIN
  // 이벤트 발생 시 실행할 문장 주로 DML
END;
/

[바인드 변수]

- 매개변수, 전달변수, PL/SQL에서는 변수명 앞에 ':'을 사용

- :new 는 새로 입력 된 데이터 (INSERT,UPDATE)

- :old 는 이미 저장되어있는 기존 데이터

=> BEGIN~EDN에서 사용 시 : :new.컬럼명, :old.컬럼명으로 사용

- 변수에 값을 치환할 경우 예약어 set 사용

 

 

트리거(Trigger) 제한/관리 

- 트리거는 트랜잭션 제어문(COMMIT, ROLLBACK, SAVEPOINT)을 사용할 수 없다.

- 트리거 활성화/비활성화

   -> ALTER TRIGGER 트리거명[DISABLE | ENABLE]

- 테이블에 속한 트리거 활성화/비활성화

   -> ALTER TABLE 테이블명[DISABLE | ENABLE] ALL TRIGGER

- 트리거 수정 후 재컴파일

   -> ALTER TRIGGER 트리거명 COMPILE

- 트리거 삭제

   -> DROP TRIGGER 트리거명

- 트리거 조회

   -> SELECT * FROM USER_TRIGGERS

 

 

 

 

[참고]

https://mine-it-record.tistory.com/107

https://mine-it-record.tistory.com/107

+ Recent posts