본문 바로가기

Database/PLSQL

081 - [Oracle PL/SQL] DML Triggers(stament-level/row-level)

 

 

 

 

 

 

  • statement trigger 샘플 코드
drop table t1;
/
create table t1
( emp_id number,
 ename varchar2(20)
);
/
insert into t1 values (1,'ford');
insert into t1 values (2,'aya');

---statement trigger
create or replace trigger t1_b4_update
before update --this timeing + event 
on t1 -- table name
begin
    DBMS_OUTPUT.PUT_LINE(':)');
end;



update t1
set ename=ename||' s'; -- 업데이트가 발생하면 트리거는 업데이트 개수와 상관없이 1번 실행된다
----------------------
:)
2 rows updated.


select * from t1;
---------------------------------------------------------
    EMP_ID ENAME               
---------- --------------------
         1 ford                
         2 aya 
---------------------------------------------------------
before/after update
---------------------------------------------------------
    EMP_ID ENAME               
---------- --------------------
         1 ford s              
         2 aya s 



update t1
set ename=ename||' s'
where emp_id=5555;-- 업데이트 건수가 0개수여도, 상관없이 1번 실행된다
----------------------
:)
0 rows updated.


select * from t1;
--after update, 조건에 맞는 데이터가 없어서 실제 업데이트는 0건임.
---------------------------------------------------------
    EMP_ID ENAME               
---------- --------------------
         1 ford s              
         2 aya s

 

 

 

  • row trigger 샘플 코드
--row trigger
create or replace trigger t1_b4_update
before update -- this timeing + event 
on t1         -- table name
for each row  -- 이부분 추가됨
begin
    DBMS_OUTPUT.PUT_LINE(':))');
end;


update t1
set ename=ename||' s';
--------------------------
:))
:))
2 rows updated.


update t1
set ename=ename||' s'
where emp_id=5555;
--------------------------
0 rows updated.


select * from t1;
---------------------------------------------------------
    EMP_ID ENAME               
---------- --------------------
         1 ford s s            
         2 aya s s