(7) PL/SQL 트리거

PL/SQL 트리거 사용법과 간단한 예제


시작하기 전에

사용 교재 : 오라클SQL과 PL/SQL을 다루는 기술 (https://thebook.io/006696/)

예제 코드 : https://github.com/gilbutITbook/006696


SERVEROUTPUT 설정

PL/SQL 결과물을 보기 위해 아래의 실행문을 실행

SET SERVEROUTPUT ON;

트리거 (TRIGGER)

데이터베이스 이벤트에 반응하여 실행되는 프로그램 단위.

DB 관리 자동화 등이 목적이다.

보통 DML 이벤트가 일어날 때 자주 활용됨.

트리거 내에서는 COMMIT & ROLLBACK문 사용 불가.


트리거 기본구조

CREATE [OR REPLACE] TRIGER 트리거명
	[BEFORE | AFTER]
	이벤트1 [ OR 이벤트2 [ OR 이벤트3]] ON 테이블명
	[FOR EACH ROW[WHEN TRIGGER 조건]]

[DECLARE]
	-- 선언부

BEGIN
	--실행부

END;


예제1

  • 테이블1에 값이 기록되면 테이블2에 로그를 남기는 트리거
-- 테이블 1
CREATE TABLE exam1(
        id NUMBER PRIMARY KEY,
        name VARCHAR2(20)
);

-- 테이블 2
CREATE TABLE exam2(
        log VARCHAR2(100),
        regdate DATE Default SYSDATE
);

-- 트리거
CREATE OR REPLACE TRIGGER trig_insert_exam
AFTER
        INSERT ON exam1
BEGIN
        INSERT INTO exam2(log) VALUES('추가작업 - 로그');
END;
/

-- 트리거 실행
INSERT INTO exam1 VALUES(100,'홍길동');

-- 트리거 결과 확인
SELECT * FROM exam1;
SELECT * FROM exam2;

1

2


예제2

  • 트리거를 DML시 로그를 생성하게끔 수정
-- 트리거 수정
CREATE OR REPLACE TRIGGER trig_insert_exam
AFTER 
    INSERT OR UPDATE OR DELETE ON exam1
DECLARE 
    v_msg VARCHAR2(100);
BEGIN
    -- DML(INSERT, UPDATE, DELETE)시 로그 생성 세분화
    IF INSERTING THEN 
        v_msg := '> 추가 작업 - 로그';
    ELSIF UPDATING THEN 
        v_msg := '> 수정 작업 - 로그';
    ELSIF DELETING THEN 
        v_msg := '> 삭제 작업 - 로그';
    END IF;
    INSERT INTO exam2(log) VALUES (v_msg);
END;
/

-- 트리거 발생
INSERT INTO exam1 VALUES (101, '김길동');
UPDATE exam1 SET name='김길동' WHERE id = 100;
DELETE FROM exam1 WHERE id = 100;

-- 결과 확인
SELECT * FROM exam1;
SELECT * FROM exam2;

3

4






Categories:

Updated:

Leave a comment