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 |