(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;
예제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;
Leave a comment