Wednesday, July 29, 2009

트리거(오라클)

트리거란?◆ INSERT, UPDATE, DELETE문이 TABLE에 대해 행해질 때 묵시적으로 수행되는 PROCEDURE 입니다.◆ Trigger는 TABLE과는 별도로 DATABASE에 저장됩니다.◆ Trigger는 VIEW에 대해서가 아니라 TABLE에 관해서만 정의될 수 있습니다.
- BEFORE : INSERT, UPDATE, DELETE문이 실행되기 전에 트리거가 실행됩니다. - AFTER : INSERT, UPDATE, DELETE문이 실행된 후 트리거가 실행됩니다. - trigger_event : INSERT, UPDATE, DELETE 중에서 한 개 이상 올 수 있습니다. - FOR EACH ROW : 이 옵션이 있으면 행 트리거가 됩니다. -- 행 트리거 : 컬럼의 각각의 행의 데이터 행 변화가 생길때마다 실행되며, 그 데이터 행의 실제값을 제어할수 있습니다. -- 문장 트리거 : 트리거 사건에 의해 단 한번 실행되며, 컬럼의 각 데이터 행을 제어할수 없습니다.
간단한 행 트리거 예제SQL>CREATE OR REPLACE TRIGGER triger_testBEFOREUPDATE ON deptFOR EACH ROWBEGINDBMS_OUTPUT.PUT_LINE('변경 전 컬럼 값 : ' :old.dname);DBMS_OUTPUT.PUT_LINE('변경 후 컬럼 값 : ' :new.dname);END;/SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용)-- UPDATE문을 실행시키면.. SQL>UPDATE deptSET dname = '총무부'WHERE deptno = 30-- 트리거가 자동 실행되어 결과가 출력됩니당. 변경 전 컬럼 값 : 인사과변경 후 컬럼 값 : 총무부1 행이 갱신되었습니다.
간단한 행 트리거 예제2 (PLSQL BLOCK이 있는 트리거)SQL>CREATE OR REPLACE trigger sum_triggerBEFOREINSERT OR UPDATE ON empFOR EACH ROWDECLARE-- 변수를 선언할 때는 DECLARE문을 사용해야 합니다 avg_sal NUMBER;BEGINSELECT ROUND(AVG(sal),3)INTO avg_salFROM emp;DBMS_OUTPUT.PUT_LINE('급여 평균 : ' avg_sal);END; /트리거가 생성되었습니다.SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용)-- INSERT문을 실행합니다..SQL> INSERT INTO EMP(EMPNO, ENAME, JOB, HIREDATE, SAL)VALUES(1000, 'LION', 'SALES', SYSDATE, 5000);-- INSERT문을 실행되기 전까지의 급여 평균이 출력됩니다. 급여 평균 : 2073.2141 개의 행이 만들어졌습니다.
출처 ================================================ * Oracle Community OracleClub.com * http://www.oracleclub.com * http://www.oramaster.net * 운영자 : 김정식 (oramaster _at_ empal.com)================================================

No comments: