<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);
์ ์์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ฝ์ ๋๋ฉด ์ง์ ํ ๋ฌธ๊ตฌ๊ฐ ์ถ๋ ฅ๋๋ค.