트리거란?
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> 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 행이 갱신되었습니다.
간단한 트리거 예제 2
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
- - 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- - 구루비의 모든 강좌는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.
'IT > 오라클' 카테고리의 다른 글
ORACLE INDEX 정리 (0) | 2015.12.15 |
---|---|
[Oracle] Lock 확인 및 Lock 해제 (0) | 2015.11.25 |
Oracle PL/SQL 강좌 8. Package(패키지) (0) | 2015.11.24 |
Oracle PL/SQL 강좌 7.5. SQLCODE, SQLERRM (0) | 2015.11.24 |
Oracle PL/SQL 강좌 7.4. 사용자 정의 예외(User-Defined Exceptions) (0) | 2015.11.24 |