[Oracle] νΈλ¦¬κ±°(Trigger)λ? (feat. C.R.U.D)
μλ νμΈμ 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;
μλμ κ°μ΄ νΈλ¦¬κ±°κ° μμ λ κ±Έ λ³Ό μ μμ΅λλ€.