plsql learning - six:DML trigger

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值