트리거는 사전적 의미로는 방아쇠를 의미한다
말 그대로 트리거는 방아쇠를 당겼을때 총이 나가는 것 처럼
트리거를 실행하면 안에 담겨있는 실행문이 그대로 실행되는 것이다.
VIEW에 대해서는 트리거를 이용할 수 없고 INSERT, UPDATE, DELETE문만 사용가능하다.
CREATE OR REPLACE TRIGGER 트리거 이름
[BEFORE|AFTER]
[INSERT|UPDATE|DELETE] ON 테이블 이름
[FOR EACH ROW] …
Pl/sql 실행문
와 같은 익숙한 구조로 만들어진다.
안의 옵션의 설명은
[BEFORE|AFTER] : 문장이 실행 되기 전/후에 실행된다.
[INSERT|UPDATE|DELETE] ON 테이블 이름 : 작동할 구문
[FOR EACH ROW] : 이 옵션은 행 트리거가 된다.
행/문장 트리거
행 Trigger : 컬럼의 각 행의 데이터 변화가 생길 때마다 실행 (데이터 행 제어 O)
문장 Trigger : 트리거 사건에 의해 단 한번만 실행(데이터 행 제어 X)
SET SERVEROUTPUT ON; -- 사용 테이블 2개 생성 CREATE TABLE emp01( empno NUMBER(4) PRIMARY KEY, ename VARCHAR2(20), job VARCHAR2(20) ); CREATE TABLE emp02( empno NUMBER(4) PRIMARY KEY, ename VARCHAR2(20), job VARCHAR2(20) ); -- INSERT TRIGGER -- emp01에 데이터가 들어가면 emp02에도 들어간다. CREATE OR REPLACE TRIGGER tri_insert AFTER INSERT ON emp01 -- emp01에서 insert가 일어난 후에 작동하여라 FOR EACH ROW -- 각 행의 데이터를 변화를 감시, 감지되면 아래 구문을 실행 BEGIN -- :NEW 는 새로 들어온 데이터를 의미 INSERT INTO emp02 VALUES(:NEW.empno, :NEW.ename, :NEW.job); END; / -- 데이터 삽입 INSERT INTO emp01 VALUES(1, 'kim', '개발자'); INSERT INTO emp01 VALUES(2, 'lee', '디자이너'); INSERT INTO emp01 VALUES(3, 'park', '기획자'); -- 트리거 결과 확인 SELECT * FROM emp01; SELECT * FROM emp02; -- UPDATE TRIGGER -- emp01이 수정되면 emp02도 수정된다. CREATE OR REPLACE TRIGGER tri_update AFTER UPDATE ON emp01 FOR EACH ROW BEGIN UPDATE emp02 SET ename = :NEW.ename, job = :NEW.job WHERE empno = :NEW.empno; END; / -- 데이터 변경 UPDATE emp01 SET ename = 'oh', job = '개발자' WHERE empno = 2; -- 트리거 결과 확인 SELECT * FROM emp01; SELECT * FROM emp02; -- DELETE TRIGGER -- emp01이 삭제되면 emp02도 삭제된다. CREATE OR REPLACE TRIGGER tri_del AFTER DELETE ON emp01 FOR EACH ROW BEGIN -- OLD는 이전 데이터를 의미하지만 DELETE문에서는 삭제할 자료를 의미 DELETE FROM emp02 WHERE empno = :OLD.empno; END; / -- 데이터 삭제 DELETE FROM emp01 WHERE empno = 2; -- 트리거 결과 확인 SELECT * FROM emp01; SELECT * FROM emp02; -- 트리거 조회 SELECT * FROM USER_TRIGGERS; -- 트리거 소스 확인 SELECT * FROM USER_SOURCE WHERE type = 'TRIGGER' AND name = 'TRI_INSERT'; -- 트리거 삭제 DROP TRIGGER tri_insert;
이와같이 데이터의 변경을 감지 할 수 있으므로 백업같은 작업에 잘 사용한다.
'Oracle DB 11g > 03.PL SQL' 카테고리의 다른 글
[DB]03-08.Oracle DB PLSQL 커서, CURSOR (0) | 2018.10.11 |
---|---|
[DB]03-07.Oracle DB PLSQL LOOP, WHILE, FORLOOP 반복문 (0) | 2018.10.11 |
[DB]03-06.Oracle DB PLSQL IF문, 만들어 둔 프로시저 소스 확인 (0) | 2018.10.10 |
[DB]03-05.Oracle DB PLSQL Procedure(Insert, Update, Delete 예제) (0) | 2018.10.10 |
[DB]03-04.Oracle DB PLSQL Function (0) | 2018.10.10 |