The trigger triggered when DML sentences executed,the steps are:
1)If there are before-triggers before the sentence,run these triggers.
2)For every row of the sentences that involved:
a.if there are before-triggers for each row,run these trigger.
b.execute this sentence
c.if there are after--triggers for each row,run these trigger.
3)If there are after-triggers after the sentence,run these triggers.
Here is the example:
create sequence trig_seq start with 1 increment by 1;
create or replace package TrigPackage as
v_Counter number;
end TrigPackage;
create or replace trigger ClassesBStatement
before update on classes
begin
TrigPackage.v_Counter := 0;
insert into temp_table(num_col,char_col)
values(trig_seq.nextval,'Before Statement: counter = '||TrigPackage.v_Counter);
--increment for the next trigger
TrigPackage.v_Counter := TrigPackage.v_Counter + 1;
end ClassesBStatement;
create or replace trigger ClassesAStatement1
after update on classes
begin
--TrigPackage.v_Counter := 0;
insert into temp_table(num_col,char_col)
values(trig_seq.nextval,'After Statement1: counter = '||TrigPackage.v_Counter);
TrigPackage.v_Counter := TrigPackage.v_Counter + 1;
end ClassesAStatement1;
create or replace trigger ClassesAStatement2
after update on classes
begin
--TrigPackage.v_Counter := 0;
insert into temp_table(num_col,char_col)
values(trig_seq.nextval,'After Statement2: counter = '||TrigPackage.v_Counter);
TrigPackage.v_Counter := TrigPackage.v_Counter + 1;
end ClassesAStatement2;
create or replace trigger ClassesBRow1
before update on classes
for each row
begin
--TrigPackage.v_Counter := 0;
insert into temp_table(num_col,char_col)
values(trig_seq.nextval,'Before Row1: counter = '||TrigPackage.v_Counter);
TrigPackage.v_Counter := TrigPackage.v_Counter + 1;
end ClassesBRow1;
create or replace trigger ClassesBRow2
before update on classes
for each row
begin
--TrigPackage.v_Counter := 0;
insert into temp_table(num_col,char_col)
values(trig_seq.nextval,'Before Row2: counter = '||TrigPackage.v_Counter);
TrigPackage.v_Counter := TrigPackage.v_Counter + 1;
end ClassesBRow2;
create or replace trigger ClassesBRow3
before update on classes
for each row
begin
--TrigPackage.v_Counter := 0;
insert into temp_table(num_col,char_col)
values(trig_seq.nextval,'Before Row3: counter = '||TrigPackage.v_Counter);
TrigPackage.v_Counter := TrigPackage.v_Counter + 1;
end ClassesBRow3;
create or replace trigger ClassesARow
after update on classes
for each row
begin
--TrigPackage.v_Counter := 0;
insert into temp_table(num_col,char_col)
values(trig_seq.nextval,'After Row: counter = '||TrigPackage.v_Counter);
TrigPackage.v_Counter := TrigPackage.v_Counter + 1;
end ClassesARow;
then test it by followed code:
update classes c set c.num_credits = 4 where c.department in ('HIS','CS')
select * from temp_table order by num_col
the result is:
1 Before Statement: counter = 0
2 Before Row3: counter = 1
3 Before Row2: counter = 2
4 Before Row1: counter = 3
5 After Row: counter = 4
6 Before Row3: counter = 5
7 Before Row2: counter = 6
8 Before Row1: counter = 7
9 After Row: counter = 8
10 Before Row3: counter = 9
11 Before Row2: counter = 10
12 Before Row1: counter = 11
13 After Row: counter = 12
14 Before Row3: counter = 13
15 Before Row2: counter = 14
16 Before Row1: counter = 15
17 After Row: counter = 16
18 After Statement2: counter = 17
19 After Statement1: counter = 18