์๋ ํ์ธ์ 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;
์๋์ ๊ฐ์ด ํธ๋ฆฌ๊ฑฐ๊ฐ ์ญ์ ๋ ๊ฑธ ๋ณผ ์ ์์ต๋๋ค.
'๐ Database > Oracle' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Oracle] ํจ์(Function)๋? (feat. C.R.U.D) (0) | 2022.03.05 |
---|---|
[Oracle] ์ธ๋ฑ์ค(Index)๋? (feat. C.R.U.D) (0) | 2022.03.05 |
[Oracle] ํ๋ก์์ (Procedure)๋? (feat. C.R.U.D) (0) | 2022.03.04 |
[Oracle] ๋ทฐ(View)๋? (feat C.R.U.D) (0) | 2022.03.04 |
[Oracle] Oracle ๋ฐ์ดํฐ ํ์ ์์๋ณด๊ธฐ(Oracle Data Type) (0) | 2022.02.24 |
๋๊ธ