Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the ultimate-member domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /ledcorps/www/wp/wp-includes/functions.php on line 6114 9 Trigger(트리거) – 대나무숲

9 Trigger(트리거)

출처 http://www.gurubee.net/lecture/1076

트리거란?

  INSERT, UPDATE, DELETE문이 TABLE에 대해 행해질 때 묵시적으로 수행되는 PROCEDURE 이다.

  트리거는 TABLE과는 별도로 DATABASE에 저장 된다.

  트리거는 VIEW에 대해서가 아니라 TABLE에 관해서만 정의 될 수 있다.

  행 트리거 : 컬럼의 각각의 행의 데이터 행 변화가 생길때마다 실행되며, 그 데이터 행의 실제값을 제어할 수 있다.

  문장 트리거 : 트리거 사건에 의해 단 한번 실행되며, 컬럼의 각 데이터 행을 제어 할 수 없다.

트리거 문법

  • – BEFORE : INSERT, UPDATE, DELETE문이 실행되기 전에 트리거가 실행 된다.
  • – AFTER : INSERT, UPDATE, DELETE문이 실행된 후 트리거가 실행 된다.
  • – trigger_event : INSERT, UPDATE, DELETE 중에서 한 개 이상 올 수 있다.
  • – FOR EACH ROW : 이 옵션이 있으면 행 트리거가 된다.

간단한 트리거 예제 1

 
SQL> <strong>CREATE OR REPLACE TRIGGER</strong> triger_test
       <strong>BEFORE
       UPDATE ON</strong> dept
       <strong>FOR EACH ROW</strong>
	   
	   <strong>BEGIN</strong>
        DBMS_OUTPUT.PUT_LINE('변경 전 컬럼 값 : ' || : old.dname);
        DBMS_OUTPUT.PUT_LINE('변경 후 컬럼 값 : ' || : new.dname);
     <strong>END</strong>;
     /

-- DBMS_OUTPUT.PUT_LINE을 출력
SQL> <strong>SET SERVEROUTPUT ON</strong> ; 

-- UPDATE문을 실행시키면.. 
SQL> <strong>UPDATE</strong> dept <strong>SET</strong> dname = '총무부' <strong>WHERE</strong> deptno = 30

-- 트리거가 자동 실행되어 결과가 출력된다. 
변경 전 컬럼 값 : 인사과
변경 후 컬럼 값 : 총무부

1 행이 갱신되었습니다.
    

간단한 트리거 예제 2

 
SQL> <strong>CREATE OR REPLACE TRIGGER</strong> sum_trigger
       <strong>BEFORE
       INSERT OR UPDATE ON</strong> emp
       <strong>FOR EACH ROW</strong>

    <strong>DECLARE</strong>
	
        -- 변수를 선언할 때는 DECLARE문을 사용해야 한다 
        avg_sal NUMBER;
	
    <strong>BEGIN</strong>
	
        SELECT ROUND(AVG(sal),3)
        INTO avg_sal
        FROM emp;

        DBMS_OUTPUT.PUT_LINE('급여 평균 : ' || avg_sal);
	
    <strong>END</strong>; 
    /

-- DBMS_OUTPUT.PUT_LINE을 출력
SQL> <strong>SET SERVEROUTPUT ON</strong> ;

-- INSERT문을 실행해보자.
SQL> <strong>INSERT INTO</strong> EMP(EMPNO, ENAME, JOB, HIREDATE, SAL)
     <strong>VALUES</strong>(1000, 'LION', 'SALES', SYSDATE, 5000);

-- INSERT문을 실행되기 전까지의 급여 평균이 출력된다. 
급여 평균 : 2073.214

1 개의 행이 만들어졌습니다.
    

답글 남기기 0

Your email address will not be published. Required fields are marked *