TRIGGER란 : 이벤트가 발생하면 데이터베이스에 의해 자동으로 수행
[ 테이블의 지정된 column에 대해서 트리거 실행 시키는 방법!!! ]
예제)
TB_TEST의 acc_nm1, acc_nm2, acc_nm3, acc_nm4, acc_nm5, acc_short_nm, acc_eng_nm
데이타 변경시 TB_TEST_LOG에 이력 남기기
트리거)
create or replace trigger TR_TEST_U
after UPDATE of acc_nm1, acc_nm2, acc_nm3, acc_nm4, acc_nm5, acc_short_nm, acc_eng_nm on TB_TEST
referencing new as new old as old
for each row
declare
begin
insert into tb_test_log
( acc_cd,
chg_dt,
acc_nm1,
acc_nm2,
acc_nm3,
acc_nm4,
acc_nm5,
acc_short_nm,
acc_eng_nm,
chg_div,
create_id,
create_dt,
create_ip)
values
( :new.acc_cd,
sysdate,
:new.acc_nm1,
:new.acc_nm2,
:new.acc_nm3,
:new.acc_nm4,
:new.acc_nm5,
:new.acc_short_nm,
:new.acc_eng_nm,
'U',
:new.modify_id,
sysdate,
:new.modify_ip
);
exception
when others then
RAISE_APPLICATION_ERROR(-20002,'TR_TEST_UError '||sqlerrm);
end ;
수행시점 | 수행단위 | 비고 |
BEFORE | DML문 수행 전에 실행 | |
AFTER | DML문 수행 후에 실행 | |
BEFORE | FOR EACH ROW | DML문 수행 전에 행단위로 실행 |
AFTER | FOR EACH ROW | DML문 수행 후에 행단위로 실행 |
OLD | NEW | |
INSERT | 삽입값 | |
UPDATE | 갱신 전 값 | 갱신 후 값 |
DELETE | 삭제 값 |
◆ 단순 DML TRIGGER 실행 순서
1) BEFORE 문장 단위 DML 트리거
2) BEFORE 행 단위 DML 트리거
3) AFTER 행 단위 DML 트리거
4) AFTER 문장 단위 DML 트리거
◆ TRIGGER 조회
SELECT * FROM USER_TRIGGERS ;
◆ 트리거 유형
. DML 트리거
1) 단순 DML 트리거
1-1) 문장 단위 DML 트리거
1-2) 행 단위 DML 트리거
2) INSTEAD OF DML 트리거
3) 복합 DML 트리거
. 시스템 트리거
1) 데이터베이스 트리거
2) 스키마 트리거
3) INSTEAD OF CREATE 트리거