Oracle/운영

특정 테이블의 컬럼의 Update만 인식하는 Trigger 생성하기

취미툰 2020. 8. 27. 02:22
반응형

트리거란 일정 이벤트(DML)이 일어났을 때 자동으로 수행되는 사용자 정의 프로시저입니다.

보통은 테이블의 DML 작업이 있을 때 발동되는 트리거가 대부분인데요. 이번에는 테이블 내의 특정 컬럼만 트리거를 거는 방법을 알아보겠습니다.

 

시나리오는 특정 테이블의 컬럼에 Update가 되면 다른 테이블에 그 값이 Insert 되는 트리거를 생성하고 설정된 컬럼과 설정되지 않은 컬럼을 Update해보고 비교해보도록 하겠습니다.

 

테스트 테이블은 sample schema인 emp테이블을 활용하겠습니다.

TEST@ysbae>create table tb_tri_test as select * from emp;

 

Update값을 받을 테이블을 생성해줍니다.

create table a_tr (sal number(10));

 

트리거를 생성해줍니다. sal 컬럼의 값이 update되면 a_tr에 값이 insert되는 트리거입니다.

Update of [컬럼명] on [테이블명]의 형식으로 작성합니다.

 

TEST@ysbae>  create or replace trigger tri_a
   after
   update of sal on tb_tri_test
   for each row
   declare
   begin
   insert into a_tr values (:new.sal);
   end;
   / 

Trigger created.

 

SAL 컬럼 Update

 

TEST@ysbae> update tb_tri_test set sal=9999 where empno=7788;

1 row updated.

확인
TEST@ysbae> select * from a_tr;
       SAL 
---------- 
      9999 


1 row selected.

 

MGR컬럼 Update

TEST@ysbae> update tb_tri_test set mgr=7777 where empno=7788;

1 row updated.

TEST@ysbae> select * from a_tr;

       SAL
----------
      9999


1 row selected.

 

 

트리거가 걸려있는 컬럼의 값만 Insert된 것을 확인할 수 있습니다.

 

※추가사항

Rollback 명령어를 입력하면 a_tr테이블에 있는 값도 rollback됩니다. (당연한 이야기겠지만 적어보았습니다..)

 

TEST@ysbae> select * from a_tr;

       SAL
----------
      9999

1 row selected.

TEST@ysbae> rollback;

Rollback complete.

TEST@ysbae> select * from a_tr;

no rows selected

반응형