본문 바로가기
Oracle/운영

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

by 취미툰 2020. 8. 27.
반응형

트리거란 일정 이벤트(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

반응형

'Oracle > 운영' 카테고리의 다른 글

Reorg 방법 - Shrink 와 Move  (2) 2020.09.02
Pivot 함수와 Pivot XML  (1) 2020.08.29
NUMBER 데이터타입과 데이터타입 변경  (3) 2020.08.26
컬럼사이즈 변경 및 데이터타입 변경  (0) 2020.08.25
Restricted Session  (0) 2020.08.22

댓글