[Oracle DB] 트리거 (trigger) 의 κ°œλ…κ³Ό 예제

2025. 1. 14. 16:23Β·DBMS/OracleDB
 CREATE OR REPLACE TRIGGER trigger_name
            BEFORE|AFTER [INSERT|UPDATE|DELETE] ON table_name
            DECLARE 
                λ³€μˆ˜ μ„ μ–Έ => λ³€μˆ˜κ°€ μ—†μœΌλ©΄ μƒλž΅
            BEGIN
                트리거 κ΅¬ν˜„
            END;

트리거의 κ°œλ…

- νŠΈλ¦¬κ±°λŠ” ν”„λ‘œμ‹œμ €μ™€ μœ μ‚¬ν•˜μ§€λ§Œ μ‹€ν–‰λ˜λŠ” 원리가 λ‹€λ₯΄λ‹€

- ν”„λ‘œμ‹œμ €λŠ” μž‘μ„± ν›„ EXECUTE / EXEC λͺ…λ Ήμ–΄λ₯Ό ν†΅ν•΄μ„œ 직접 μ‹€ν–‰ν•˜μ§€λ§Œ

νŠΈλ¦¬κ±°λŠ” μ–΄λ–€ 이벀트 ( 주둜 DML ) κ°€ λ°œμƒν–ˆμ„ λ•Œ '내뢀적'으둜 μ‹€ν–‰λ˜λŠ” μ €μž₯된 ν”„λ‘œμ‹œμ €μ΄λ‹€.

 

트리거의 νŠΉμ§•

- ν”„λ‘œμ‹œμ €μ˜ ν˜•νƒœμ΄μ§€λ§Œ λ‹¨λ…μœΌλ‘œ μ‚¬μš©λ˜κΈ° 보닀 DML ꡬ문에 λΆ™μ—¬μ„œ μ‚¬μš© λœλ‹€

 

트리거의 μ’…λ₯˜

- AFTER 트리거 : DML λ“±μ˜ μž‘μ—…μ΄ 일어났을 λ•Œ μž‘λ™ν•˜λŠ” 트리거, ν•΄λ‹Ή μž‘μ—… 후에 μž‘λ™ν•œλ‹€

-BEFORE 트리거 : DML λ“±μ˜ μž‘μ—…μ΄ 일어났을 λ•Œ μž‘λ™ν•˜λŠ” 트리거, ν•΄λ‹Ή μž‘μ—… 직전에 μž‘λ™ν•œλ‹€


트리거 μ‚¬μš© 예제 (INSERT)

λ‹€μŒμ€ AFTER 트리거의 ν•œ μ˜ˆμ œμ΄λ‹€.

데이터λ₯Ό dept_orgin ν…Œμ΄λΈ”μ— μž…λ ₯ν•  λ•Œ, dept_copy ν…Œμ΄λΈ”μ—λ„ μž…λ ₯ν•˜λŠ” νŠΈλ¦¬κ±°μ΄λ‹€.

CREATE OR REPLACE TRIGGER trigger_sample1
    AFTER INSERT -- after트리거 INSERT 이후에 ~ (DMLλ¬Έ) 
    ON dept_orgin -- μ–΄λ””μ„œ? dept_orgin ν…Œμ΄λΈ”μ—μ„œ 
    for each row -- 각 ν–‰λ§ˆλ‹€
BEGIN
    IF inserting then -- λ§Œμ•½μ— inserting 이 λ°œμƒν•˜λ©΄ ~
        dbms_output.put_line('Insert Trigger λ°œμƒ');
		.
        .
        .
        END IF;
END;

 

트리거 κ΅¬ν˜„λΆ€μ—μ„œ μ•„λΌμ™œ 같은 :NEW μž„μ‹œ ν…Œμ΄λΈ”μ˜ κ°œλ…μ΄ λ“±μž₯ν–ˆλŠ”λ°, μž‘λ™ μ›λ¦¬λŠ” μ•„λž˜ 그림을 μ°Έκ³ ν•˜λ©΄ λœλ‹€.

 

:NEW ν…Œμ΄λΈ”

INSERT와 UPDATE μž‘μ—… μ‹œμ— λ³€κ²½ν•  μƒˆλ‘œμš΄ 데이터λ₯Ό 잠깐 μ €μž₯ν•΄ λ†“λŠ” μž„μ‹œ ν…Œμ΄λΈ”μ΄λ‹€.

 

:OLD ν…Œμ΄λΈ”

DELETE μž‘μ—… μ‹œ 데이터λ₯Ό 잠깐 μ €μž₯ν•΄ λ†“λŠ” μž„μ‹œ ν…Œμ΄λΈ”μ΄λ‹€.

        insert into dept_copy
            values(:new.dno, :new.dname, :new.loc);
        END IF;

 

그럼 INSERT 문으둜 dept_orgin ν…Œμ΄λΈ”μ— 데이터λ₯Ό μž…λ ₯ ν›„ μ‘°νšŒν•΄λ³΄μž.

INSERT INTO dept_orgin VALUES(10, 'ACCOUNTING', 'NEW YORK');

SELECT * FROM dept_orgin;
SELECT * FROM dept_copy;

 

쑰회결과

dept_orgin ν…Œμ΄λΈ”μ— 데이터λ₯Ό μž…λ ₯ν•˜μž λ³„λ„μ˜ μ‹€ν–‰λ¬Έ 없이 AFTER 트리거 (INSERT)κ°€ μ‹€ν–‰ λ˜μ–΄ dept_copy ν…Œμ΄λΈ”μ—λ„ 데이터가 μž…λ ₯된 것을 확인 ν•  수 μžˆλ‹€.


트리거 μ‚¬μš© 예제 (UPDATE & DELETE)

λ‹€μŒμ€ AFTER 트리거 UPDATE & DELETE 의 μ˜ˆμ œμ΄λ‹€.

μž…λ ₯된 데이터λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μ‚­μ œν• λ•Œ λ°œμƒλ˜λŠ” 트리거λ₯Ό κ΅¬ν˜„ν•˜λŠ”λ° dept_copy ν…Œμ΄λΈ”μ— μˆ˜μ •/μ‚­μ œ λ₯Ό ν‘œμ‹œ(μž…λ ₯)

ν•˜κΈ° μœ„ν•œ μ»¬λŸΌμ„ ν•˜λ‚˜ μΆ”κ°€ν•˜κ³  예제λ₯Ό μ§„ν–‰ν–ˆλ‹€. (컬럼 μΆ”κ°€ μŠ€ν¬λ¦½νŠΈλŠ” μƒλž΅.)

CREATE OR REPLACE TRIGGER trigger_sample2
    AFTER UPDATE OR DELETE
    ON dept_orgin
    for each row
DECLARE
    v_modType NCHAR(2);
BEGIN
	.
    .
    .
    .
END;

 

이제 트리거 κ΅¬ν˜„λΆ€λ₯Ό μž‘μ„±ν•  차둀인데 μœ„μ—μ„œ μ„€λͺ…ν•œ :OLD μž„μ‹œ ν…Œμ΄λΈ”μ˜ κ°œλ…μ΄ λ“±μž₯ν•œλ‹€.

    IF updating then
        dbms_output.put_line('updating Trigger λ°œμƒ');
        v_modType := 'μˆ˜μ •';
    ELSIF deleting then
        dbms_output.put_line('deleting Trigger λ°œμƒ');
        v_modType := 'μ‚­μ œ';
    END IF;
    INSERT INTO dept_copy
    VALUES(:old.dno, :old.dname, :old.loc, v_modType);

 

dept_orgin ν…Œμ΄λΈ”μ˜ 데이터λ₯Ό μˆ˜μ •(update), μ‚­μ œ(delete) ν•˜κ²Œ 되면 dept_copy ν…Œμ΄λΈ”μ— μˆ˜μ •, μ‚­μ œλœ 데이터듀을

μ €μž₯ν•˜κ³  μˆ˜μ •/μ‚­μ œμ˜ 정보가 ν‘œμ‹œλ˜λŠ” κ΅¬ν˜„λΆ€ μŠ€ν¬λ¦½νŠΈμ™€ μ‘°νšŒκ²°κ³Όμ΄λ‹€.

 

쑰회결과 (UPDATE)

UPDATE dept_orgin SET dno=30, dname='SALES', loc='CHICAGO'
WHERE dno=10;

 

쑰회결과 (UPDATE)

DELETE FROM dept_orgin WHERE dno=30;

 


 

'DBMS > OracleDB' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Oracle DB] 문자 ν•¨μˆ˜ LPAD, SUBSTR, REPLACE  (0) 2025.01.07
[OracleDB] Constraints(μ œμ•½μ‘°κ±΄) 에 λŒ€ν•΄ μ•Œμ•„λ³΄μž  (0) 2025.01.02
'DBMS/OracleDB' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Oracle DB] 문자 ν•¨μˆ˜ LPAD, SUBSTR, REPLACE
  • [OracleDB] Constraints(μ œμ•½μ‘°κ±΄) 에 λŒ€ν•΄ μ•Œμ•„λ³΄μž
🌟 Sean 🌟
🌟 Sean 🌟
  • 🌟 Sean 🌟
    Road to Dev
    🌟 Sean 🌟
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (38) N
      • Project (7)
      • Spring (3)
      • Java (7)
      • JSP&Servlet (3)
      • Framework (1)
      • DBMS (3)
        • OracleDB (3)
      • JavaScript (4)
      • HTML+CSS (7)
      • Git&GitHub (2) N
      • WEB (1)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    html
    frontend
    java
    μ„œλ²„λ°°ν¬
    Database
    JavaScript
    DBMS
    DB
    μŠ€ν”„λ§λΆ€νŠΈ
    Spring
    docker
    μžλ°”μŠ€ν¬λ¦½νŠΈ
    servlet
    css
    OracleDB
    gradle
    μžλ°”
    js
    spring boot
    jsp
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.1
🌟 Sean 🌟
[Oracle DB] 트리거 (trigger) 의 κ°œλ…κ³Ό 예제
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”