ํธ๋ฆฌ๊ฑฐ(Trigger)
แ์คํค๋ง ๊ฐ์ฒด์ ์ผ์ข
แ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ฏธ๋ฆฌ ์ ํด ๋์ ํน์ ์กฐ๊ฑด์ด ๋ง์กฑ๋๊ฑฐ๋ ์ด๋ค ๋์์ด ์ํ๋๋ฉด ์๋์ผ๋ก ์คํ๋๋๋ก ์ ์ํ ๋์
ํธ๋ฆฌ๊ฑฐ๊ฐ ์คํ๋ ์กฐ๊ฑด์ด ๋๋ ์ด๋ฒคํธ
แ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐ์(DML) ๋ฌธ : DELETE, INSERT ๋๋ UPDATE
แ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์(DDL) ๋ฌธ : CREATE, ALTER ๋๋ DROP
แ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ : SERVERERROR, LOGON, LOGOFF, STARTUP ๋๋ SHUTDOWN
ํธ๋ฆฌ๊ฑฐ ์ ํ
DML ํธ๋ฆฌ๊ฑฐ, INSTEAD OF ํธ๋ฆฌ๊ฑฐ, ์์คํ ํธ๋ฆฌ๊ฑฐ
ํธ๋ฆฌ๊ฑฐ ์ ๋ณด ํ์ธ
ํธ๋ฆฌ๊ฑฐ ๋ชฉ๋ก ํ์ธ
SELECT * FROM user_triggers;
ํธ๋ฆฌ๊ฑฐ ์์ค ํ์ธ
SELECT * FROM user_source;
์ฌ์ฉ์์ ์์คํ ๊ถํ ํ์ธ
SELECT * FROM user_sys_privs;
์ฌ์ฉ์์๊ฒ CREATE TRIGGER ๊ถํ ์ค์ (system ๋๋ sys ๊ณ์ )
GRANT CREATE TRIGGER TO ์ฌ์ฉ์;
ํธ๋ฆฌ๊ฑฐ ์์ฑ
CREATE [OR REPLACE] TRIGGER trigger_name { BEFORE | AFTER }
event1 [OR event2 OR event3] ON table_name
[ FOR EACH ROW [WHEN TRIGGER ์กฐ๊ฑด] ]
DECLARE
๋ณ์,์์๋ฑ์ ์ธ
BEGIN
์คํ๊ตฌ๋ฌธ
END;
-ํธ๋ฆฌ๊ฑฐ ์คํ ์๊ธฐ
แBEFORE : ํ ์ด๋ธ์ DML ํธ๋ฆฌ๊ฑฐ ์ด๋ฒคํธ ์ ์ ํธ๋ฆฌ๊ฑฐ ๋ณธ๋ฌธ์ด ์คํ
แAFTER : ํ ์ด๋ธ์ DML ํธ๋ฆฌ๊ฑฐ ์ด๋ฒคํธ ์ ์ ํธ๋ฆฌ๊ฑฐ ๋ณธ๋ฌธ์ด ์คํ
- ์ด๋ฒคํธ
INSERT, UPDATE, DELETE
- FOR EACH ROW
์ต์ ์ด ์กด์ฌํ๋ฉด ํ ํธ๋ฆฌ๊ฑฐ์ด๋ค.(๊ธฐ๋ณธ์ ๋ฌธ์ฅ ํธ๋ฆฌ๊ฑฐ)
- WHEN TRIGGER ์กฐ๊ฑด
ํธ๋ฆฌ๊ฑฐ ์ด๋ฒคํธ ์ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฐ์ดํฐ๋ง ํธ๋ฆฌ๊ฑฐ
-OLD์ NEW ์์ฌ ๋ ์ฝ๋
แOLD ์ NEW ์์ฌ ๋ ์ฝ๋๋ ROWID๋ผ๋ ๊ฐ์ ์ปฌ๋ผ์ ๊ฐ์ง๊ณ ์์
แOLD ์ NEW๋ ๋ฌธ์ฅ ํธ๋ฆฌ๊ฑฐ์์๋ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ํ ํธ๋ฆฌ๊ฑฐ์์๋ง ์ฌ์ฉ
แOLD ์ NEW๋ WHEN ์ ์์๋ OLD, NEW ์ฒ๋ผ ์์ ์ฝ๋ก (:)์ ๋ถ์ด์ง ์์ง๋ง
ํธ๋ฆฌ๊ฑฐ ๋ณธ๋ฌธ์์๋ ์ฝ๋ก (:)์ ๋ถ์ฌ์ผ ํ๋ค.
แOLD๋ ๊ฐ์ ๋ณ๊ฒฝ ํ ์ ์์ง๋ง NEW๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ค.
แ:OLD
UPDATE : ์์ ์ ์๋ฃ, DELETE : ์ญ์ ํ ์๋ฃ
แ:NEW
INSERT : ์ ๋ ฅํ ์๋ฃ, UPDATE : ์์ ํ ์๋ฃ -์ฃผ์์ฌํญ
ํธ๋ฆฌ๊ฑฐ ๋ด์์๋ COMMIT, ROLLBACK ๋ฌธ์ ์ฌ์ฉ โ
ํ๋์ ํ ์ด๋ธ์ ๋์ผํ ๋ช ๋ น๋ฌธ์ ๋ํ์ฌ ๋ ๊ฐ ์ด์์ ํธ๋ฆฌ๊ฑฐ๊ฐ ์ ์๋ ๊ฒฝ์ฐ ์คํ์์
1) BEFORE ๋ฌธ์ฅ ํธ๋ฆฌ๊ฑฐ
2) BEFORE ํ ํธ๋ฆฌ๊ฑฐ
3) AFTER ๋ฌธ์ฅ ํธ๋ฆฌ๊ฑฐ
4) AFTER ํ ํธ๋ฆฌ๊ฑฐ