동일한 조건으로 2개의 트리거가 있을경우, 어떤 트리거가 먼저 실행되는지 확인해보자.
- 준비 - 테스트 테이블, 트리거용 테이블, 시퀀스 생성
drop table emp;
/
create table emp
(id number,
name varchar2(20)
);
/
drop table which_fired_first;
/
create table which_fired_first
(seq number,
trigger_name varchar2(20)
);
/
drop sequence s1;
/
create sequence s1;
- 트리거 생성 - 우선순위 없이 생성
create or replace trigger t1
before
insert
on emp
begin
insert into which_fired_first values ( s1.nextval,'t1');
end;
/
create or replace trigger t2
before
insert
on emp
begin
insert into which_fired_first values ( s1.nextval,'t2');
end;
- 랜덤으로 트리거가 실행됨, t1, t2 중에 어떤 트리거가 먼저 실행되는지는 보장 못함
insert into emp values (1,'khaled');
/
select * from which_fired_first
order by seq;
/
delete from which_fired_first
-----------------------------------
1 row inserted.
SEQ TRIGGER_NAME
---------- --------------------
1 t2
2 t1
2 rows deleted.
- t2 트리거에 옵션 추가
--t2가 t1 이후에 실행되게 follows 옵션을 추가함
create or replace trigger t2
before
insert
on emp
follows t1
begin
insert into which_fired_first values ( s1.nextval,'t2');
end;
옵션이 추가된 테스트 결과 - 항상 t1이 먼저 실행됨
insert into emp values (1,'khaled');
/
select * from which_fired_first
order by seq;
----------------------------
SEQ TRIGGER_NAME
---------- --------------------
21 t1
22 t2
23 t1
24 t2
'Database > PLSQL' 카테고리의 다른 글
090 - [Oracle PL/SQL] Trigger - Mutating(compound & array) (0) | 2024.05.03 |
---|---|
089 - [Oracle PL/SQL] Trigger - Mutating error (0) | 2024.05.03 |
087 - [Oracle PL/SQL] Trigger - Instead of triggers (on Views) (0) | 2024.05.01 |
086 - [Oracle PL/SQL] Trigger - Default value (0) | 2024.05.01 |
085 - [Oracle PL/SQL] Trigger - Firing sequence (0) | 2024.04.30 |