INSERT, UPDATE, DELETE문이 TABLE에 대해 행해질 때 묵시적으로 수행되는 PROCEDURE 이다.
트리거는 TABLE과는 별도로 DATABASE에 저장 된다.
트리거는 VIEW에 대해서가 아니라 TABLE에 관해서만 정의 될 수 있다.
행 트리거 : 컬럼의 각각의 행의 데이터 행 변화가 생길때마다 실행되며, 그 데이터 행의 실제값을 제어할 수 있다.
문장 트리거 : 트리거 사건에 의해 단 한번 실행되며, 컬럼의 각 데이터 행을 제어 할 수 없다.
SQL> CREATE OR REPLACE TRIGGER triger_test BEFORE UPDATE ON dept FOR EACH ROW BEGIN DBMS_OUTPUT.PUT_LINE('변경 전 컬럼 값 : ' || : old.dname); DBMS_OUTPUT.PUT_LINE('변경 후 컬럼 값 : ' || : new.dname); END; / -- DBMS_OUTPUT.PUT_LINE을 출력 SQL> SET SERVEROUTPUT ON ; -- UPDATE문을 실행시키면.. SQL> UPDATE dept SET dname = '총무부' WHERE deptno = 30 -- 트리거가 자동 실행되어 결과가 출력된다. 변경 전 컬럼 값 : 인사과 변경 후 컬럼 값 : 총무부 1 행이 갱신되었습니다.
SQL> CREATE OR REPLACE TRIGGER sum_trigger BEFORE INSERT OR UPDATE ON emp FOR EACH ROW DECLARE -- 변수를 선언할 때는 DECLARE문을 사용해야 한다 avg_sal NUMBER; BEGIN SELECT ROUND(AVG(sal),3) INTO avg_sal FROM emp; DBMS_OUTPUT.PUT_LINE('급여 평균 : ' || avg_sal); END; / -- DBMS_OUTPUT.PUT_LINE을 출력 SQL> SET SERVEROUTPUT ON ; -- INSERT문을 실행해보자. SQL> INSERT INTO EMP(EMPNO, ENAME, JOB, HIREDATE, SAL) VALUES(1000, 'LION', 'SALES', SYSDATE, 5000); -- INSERT문을 실행되기 전까지의 급여 평균이 출력된다. 급여 평균 : 2073.214 1 개의 행이 만들어졌습니다.
- 강좌 URL : http://www.gurubee.net/lecture/1076
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.
트리거는 주로 어떨때 사용 되나요??