πŸ“š Database/Oracle

[Oracle] 트리거(Trigger)λž€? (feat. C.R.U.D)

Fomagran πŸ’» 2022. 3. 5. 02:18
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
λ°˜μ‘ν˜•