TRIGGER

<aside> ๐Ÿ“Œ ํŠธ๋ฆฌ๊ฑฐ๋ž€? ๋‚ด๊ฐ€ ์ €์žฅํ•œ ํ…Œ์ด๋ธ”์— INSERT, UPDATE, DELETE ๋“ฑ์˜ DML๋ฌธ์— ์˜ํ•ด ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ƒ๊ธธ ๋•Œ ์ž์ข…์œผ๋กœ ๋งค๋ฒˆ ์‹คํ–‰ํ•  ๋‚ด์šฉ์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด๋‘˜ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด

โ†’ EX 1) ํšŒ์› ํƒˆํ‡ด์‹œ ๊ธฐ์กด์˜ ํšŒ์› ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ DELETE ํ•œ ํ›„ ๊ณง๋ฐ”๋กœ ํƒˆํ‡ด๋œ ํšŒ์›๋“ค๋งŒ ๋”ฐ๋กœ ๋ณด๊ด€ํ•˜๋Š” ํƒœ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ INSERTํ•œ๋‹ค.

โ†’ EX 2) ์‹ ๊ณ  ํšŸ์ˆ˜๊ฐ€ ์ผ์ • ์ˆ˜๋ฅผ ๋„˜์—ˆ์„ ๋•Œ ๋ฌต์‹œ์ ์œผ๋กœ ํ•ด๋‹น ํšŒ์›์„ ๋ธ”๋ž™ ๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ๋˜๊ฒŒ ํ•  ๋•Œ

โ†’ EX 3) ์ž…์ถœ๊ณ ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๋ก๋  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ์ƒํ’ˆ์— ๋Œ€ํ•œ ์žฌ๊ณ  ์ˆ˜๋Ÿ‰์„ ์ˆ˜์ •ํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ

</aside>

<aside> ๐Ÿ“Œ * ํŠธ๋ฆฌ๊ฑฐ์˜ ์ข…๋ฅ˜(SQL๋ฌธ์˜ ์‹œํ–‰ ์‹œ๊ธฐ์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜)

BEFORE TRIGGER : ๋‚ด๊ฐ€ ์ง€์ •ํ•œ ํ…Œ์ด๋ธ”์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋˜๊ธฐ ์ „์— ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์‹คํ–‰ AFTER TRIGGER : ๋‚ด๊ฐ€ ์ง€์ •ํ•œ ํ…Œ์ด๋ธ”์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋œ ํ›„์— ํŠธ๋ฆฌ๊ฑฐ ์‹คํ–‰

</aside>

<aside> ๐Ÿ“Œ * SQL๋ฌธ์— ์˜ํ•ด ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๊ฐ ํ–‰์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜

STATEMENT TRIGGER(๋ฌธ์žฅ ํŠธ๋ฆฌ๊ฑฐ) : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ SQL๋ฌธ์— ๋Œ€ํ•ด ๋”ฑ ํ•œ ๋ฒˆ๋งŒ ํŠธ๋ฆฌ๊ฑฐ ์‹คํ–‰

ROW TRIGGER(ํ–‰ ํŠธ๋ฆฌ๊ฑฐ) : ํ•ด๋‹น SQL๋ฌธ์„ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์‹คํ–‰(FOR EACH ROW ์˜ต์…˜์„ ๊ธฐ์ˆ ํ•ด์•ผ ํ•œ๋‹ค.)

</aside>

<aside> ๐Ÿ“Œ * ํŠธ๋ฆฌ๊ฑฐ ์ƒ์„ฑ ๊ตฌ๋ฌธ

[ ํ‘œํ˜„์‹ ] CREATE OR REPLACE TRIGGER ํŠธ๋ฆฌ๊ฑฐ๋ช… BEFORE | AFTER INSERT | DELETE | UPDATE ON ํ…Œ์ด๋ธ”๋ช… [FOR EACH ROW] DECLARE ๋ณ€์ˆ˜์„ ์–ธ BEGIN ์‹คํ—˜๋‚ด์šฉ(ํ•ด๋‹น ์œ„์— ์ง€์ •ํ•œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ์ž๋„์œผ๋กœ ์‹คํ–‰ํ•  ๊ตฌ๋ฌธ) EXCEPTION END; /

</aside>

EMPLOYEE ํ…Œ์ด๋ธ”์— ์ƒˆ๋กœ์šด ํ–‰์ด INSERT๋  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ๋˜๋Š” ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์ •์˜ํ•œ๋‹ค. ํ•ด๋‹น ํŠธ๋ฆฌ๊ฑฐ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚œ ํ›„ ๋ฐœ์ƒํ•˜๋Š” ํŠธ๋ฆฌ๊ฑฐ์ด๊ธฐ ๋•Œ๋ฌธ์— after trigger์ด๋‹ค.

SET SERVEROUTPUT ON;    
-- ์œ„์˜ ์ฝ”๋“ค๋ฅผ ์ ์ง€ ์•Š์œผ๋ฉด TRIGGER์—์„œ ๋‚˜์˜ค๋Š” ๋ฌธ์žฅ์ด ํ™”๋ฉด์— ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

CREATE OR REPLACE TRIGGER TRG_01
AFTER INSERT ON EMPLOYEE
BEGIN
    DBMS_OUTPUT.PUT_LINE('์‹ ์ž…์‚ฌ์›๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.');
END;
/

ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•ด๋ณด์ž.

INSERT INTO EMPLOYEE(EMP_ID, EMP_NAME, EMP_NO, DEPT_CODE, SAL_LEVEL, JOB_CODE, HIRE_DATE)
VALUES (SEQ_EID.NEXTVAL, '๊น€์•„๋ฌด๊ฐœ', '123456-9876543', 'D1', 'S1', 'J1', SYSDATE);

Untitled

์ •์ƒ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฝ์ž…๋˜๋ฉด ์ง€์ •ํ•œ ๋ฌธ๊ตฌ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.