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