๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“š Database/Oracle

[Oracle] ํŠธ๋ฆฌ๊ฑฐ(Trigger)๋ž€? (feat. C.R.U.D)

by Fomagran ๐Ÿ’ป 2022. 3. 5.
728x90
๋ฐ˜์‘ํ˜•

 

์•ˆ๋…•ํ•˜์„ธ์š” Foma๐Ÿ’ป ์ž…๋‹ˆ๋‹ค!

 

์˜ค๋Š˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ํŠธ๋ฆฌ๊ฑฐ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

๋ฐ”๋กœ ์‹œ์ž‘ํ• ๊ฒŒ์š”~


ํŠธ๋ฆฌ๊ฑฐ(TRIGGER)๋ž€?

Trigger์˜ ์‚ฌ์ „์  ๋œป์€ ์ด์˜ ๋ฐฉ์•„์‡ ์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋œปํ•˜๋Š” ๋ง์€ ์ด์˜ ๋ฐฉ์•„์‡ ๋ฅผ ๋‹น๊ธฐ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์–ด๋–ค ์ด๋ฒคํŠธ์˜ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์ฒด์ ์œผ๋ก  ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์„ ๋•Œ,๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ, ์ถ”๊ฐ€๋˜์—ˆ์„ ๋•Œ์— ๋”ฐ๋ผ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์ƒ์„ฑํ•ด ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ƒ์„ฑ

 

ํŠธ๋ฆฌ๊ฑฐ ์ด๋ฆ„์„ ์ •ํ•ด์ค๋‹ˆ๋‹ค.

 

CREATE OR REPLACE TRIGGER ํŠธ๋ฆฌ๊ฑฐ์ด๋ฆ„

 

ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์–ด๋–ค ์ด๋ฒคํŠธ์—(์‚ฝ์ž… ๋˜๋Š” ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์‚ญ์ œ), ์–ธ์ œ(์ด๋ฒคํŠธ ๋ฐœ์ƒ ์ „ ๋˜๋Š” ์ด๋ฒคํŠธ ๋ฐœ์ƒ ํ›„) ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ์ง€ ์ •ํ•ด์ค๋‹ˆ๋‹ค.

 

BEFORE|AFTER INSERT|UPDATE|DELETE

 

์–ด๋–ค ํŠน์ • ์ปฌ๋Ÿผ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ •ํ•ด์ค๋‹ˆ๋‹ค.

 

OF ํŠน์ •์ปฌ๋Ÿผ

 

ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•  ํ…Œ์ด๋ธ”์„ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค.

 

ON ํ…Œ์ด๋ธ”

 

๋ณ€๊ฒฝ๋˜๊ธฐ ์ „ ๊ฐ’, ๋ณ€๊ฒฝ๋œ ํ›„์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ •ํ•ด์ค๋‹ˆ๋‹ค.

 

REFERENCING NEW AS  N OLD AS  O

 

๋ฐ์ดํ„ฐ๋ฅผ ํ–‰ ๋งˆ๋‹ค ํ•˜๋‚˜ ํ•˜๋‚˜ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž…๋ ฅํ•ด ์ค๋‹ˆ๋‹ค.

 

FOR EACH ROW

 

ํŠธ๋ฆฌ๊ฑฐ ์‹คํ–‰๊ตฌ๋ฌธ์„ ์ž‘์„ฑํ•ด์ค๋‹ˆ๋‹ค.

 

BEGIN
์‹คํ–‰๊ตฌ๋ฌธ
END;

 

์•„๋ž˜๋Š” ์†Œํ™˜์‚ฌ์˜ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ๋ˆ„์  ๊ฒŒ์ž„ ์ •๋ณด์˜ ์†Œํ™˜์‚ฌ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜๊ฒŒ ํ•˜๋Š” ํŠธ๋ฆฌ๊ฑฐ์ž…๋‹ˆ๋‹ค.

 

(์ฃผ์˜ํ•˜์‹ค ์ ์€ NEW,OLD๋ฅผ ์‚ฌ์šฉํ•  ๋–„๋Š” =: ์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

 

CREATE OR REPLACE TRIGGER UPDATE_NAME 
AFTER UPDATE 
OF NAME

ON SUMMONER_TB 
REFERENCING NEW AS  N OLD AS  O
FOR EACH ROW
BEGIN
UPDATE GAME_TB SET NAME =: N.NAME WHERE NAME =: O.NAME;
END;

 

์ •์ƒ์ ์œผ๋กœ ์ƒ์„ฑ์ด ๋˜์—ˆ๋‹ค๋ฉด ์™ผ์ชฝ ํŠธ๋ฆฌ๊ฑฐ ํƒญ์— ์ƒ์„ฑ๋œ ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


Test

 

์œ„์™€ ๊ฐ™์€ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ ์ด์ œ ์†Œํ™˜์‚ฌ์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ฉด ์‹ค์ œ๋กœ ๋ˆ„์  ๊ฒŒ์ž„ ์ •๋ณด์˜ ์†Œํ™˜์‚ฌ ์ด๋ฆ„์ด ๋ฐ”๋€Œ๋Š”์ง€ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์•„๋ž˜๋Š” ์†Œํ™˜์‚ฌ์˜ ์ •๋ณด๊ฐ€ ์ž…๋ ฅ๋˜์–ด ์žˆ๋Š” ํ…Œ์ด๋ธ” ์ •๋ณด์ž…๋‹ˆ๋‹ค.

 

 

์•„๋ž˜๋Š” ๋ˆ„์  ๊ฒŒ์ž„ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ํ…Œ์ด๋ธ” ์ •๋ณด์ž…๋‹ˆ๋‹ค.

 

 

์•„๋ž˜์™€ ๊ฐ™์ด 'woong'์œผ๋กœ ๋˜์–ด์žˆ๋Š” ์†Œํ™˜์‚ฌ์˜ ์ด๋ฆ„๋ฅผ 'Woong'์œผ๋กœ ๋ฐ”๊ฟ”๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

UPDATE SUMMONER_TB SET NAME = 'Woong' WHERE NAME = 'woong';
SELECT * FROM SUMMONER_TB;
SELECT * FROM GAME_TB;

 

์†Œํ™˜์‚ฌ ์ด๋ฆ„์ด 'Woong' ์œผ๋กœ ๋ฐ”๋€Œ์—ˆ๊ณ ,

 

 

์ž๋™์œผ๋กœ ๋ˆ„์  ๊ฒŒ์ž„ ์ •๋ณด์˜ 'woong'์ด 'Woong'์œผ๋กœ ๋ฐ”๋€ ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


์กฐํšŒ

 

์•„๋ž˜ ๊ตฌ๋ฌธ์„ ์ด์šฉํ•˜๋ฉด ๋ชจ๋“  ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

SELECT * FROM ALL_TRIGGERS;

 

 

 

ํŠน์ • ํŠธ๋ฆฌ๊ฑฐ์˜ ๋‚ด์šฉ์„ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

SELECT TEXT FROM USER_SOURCE WHERE NAME ='UPDATE_NAME';

 


์ˆ˜์ •

 

CREATE OR REPLACE ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๊ณผ ๋™์ผํ•˜๊ฒŒ ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

(ํ•ด๋‹นํ•˜๋Š” ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์žˆ์œผ๋ฉด ์ˆ˜์ •์„, ์—†์œผ๋ฉด ์ƒ์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.)

 

CREATE OR REPLACE ...

์‚ญ์ œ

 

DROP TRIGGER ํŠธ๋ฆฌ๊ฑฐ ์ด๋ฆ„์œผ๋กœ ์‹คํ–‰ํ•ด์ฃผ๋ฉด ์‚ญ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

DROP TRIGGER ํŠธ๋ฆฌ๊ฑฐ์ด๋ฆ„;

 

UPDATE_NAME ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์‚ญ์ œํ•ด์ฃผ๋ฉด

 

DROP TRIGGER UPDATE_NAME;

 

์•„๋ž˜์™€ ๊ฐ™์ด ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์‚ญ์ œ๋œ ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€