일단 해보는 코딩/Oracle SQL

[오라클/SQL] Trigger(트리거)

eun_zoey2 2022. 6. 13. 22:14
728x90
Trigger(트리거) 란?

트리거는 사전적 의미로 '방아쇠를 당기다'인데 쿼리에서 어느 지정한 조건이 만족되면 연관된 다른 이벤트가 발생하게 한다.
SQL 실행 시기를 기준으로 before 트리거( INSERT, UPDATE, DELETE 실행하기 전에 트리거 먼저 실행 됨), after 트리거(INSERT, UPDATE, DELETE 실행하고 난 후 트리거 실행 됨)가 있고, 실행 시 영향을 받는 곳을 기준으로 row 트리거(행:실행된 트  리거가 row(행) 하나하나 마다 실행 됨), statement 트리거(문장:실행된 트리거가 INSERT,UPDATE,DELETE 문장에 한 번만 실행됨)이 있다.
트리거는 트랜잭션 제어문   (COMMIT,ROLLBACK, SAVEPOINT)을 사용할 수 없고, 트리거는 트리거 문장의 실행 부분으로써 실행되므로 트리거링 문장과 같은 트랜잭션에 있다고 볼 수 있으며, 트리거링 문장이 COMMIT, ROLLBACK되면 트리거의 작업도 COMMIT, ROLLBACK 되게 된다.

트리거는 데이터의 무결성(integrity)을 보장하기 위해서 제약조건(constraints) 설정의 보조 역할도 한다.

 

!! 트리거에서 변수를 선언할 때 DECLARE를 써야 하고, 변수 선언 뒤에는 ; 으로 끝내야 한다. 

CREATE OR REPLACE TRIGGER 트리거_명
TIMING[BEFORE|AFTER] EVENT[INSERT|UPDATE|DELETE] ON 테이블_명
[FOR EACH ROW]
BEGIN
   ~
END;
CREATE OR REPLACE TRIGGER Print_Message 
AFTER INSERT ON departments       
BEGIN
  DBMS_OUTPUT.PUT_LINE('정상적으로 데이터가 추가 되었습니다!');
END;
set serveroutput on;
insert into departments (department_id, department_name) values(290,'IT_EDU');