oracle中的行触发器,oracle 行触发器与语句触发器的区别

oracle 行触发与语句触发的区别:

1、行触发器有 for each row子句。语句触发器没有for each row 子句。

2、行触发器,可以有 when 作为触发限制,可以使用new/old。语句触发器不能有when 作为触发限制。

3、行触发器:对应DML语句所影响到的表中的每一行,触发器都要执行一遍。

4、语句触发:对应DML语句所影响到的表中的所有行,触发器只执行一遍。

例子:

--测试表

create table wdt_test(test number(20));

--日志表

create table wdt_log(log_no number(20), log_date date);

--触发器

create or replace trigger buf_wdt_test

before update on wdt_test

--referencing new as new_record --新记录

--old as old_record

--for each row

declare

ln_log_no wdt_log.log_no%type default 0;

begin

select nvl(max(log_no), 0) + 1

into ln_log_no

from wdt_log;

insert into wdt_log

(log_no,

log_date)

values

(ln_log_no,

sysdate);

end;

--测试

SQL> insert into wdt_tset (test) values(11);

SQL> insert into wdt_tset (test) values(22);

SQL> insert into wdt_tset (test) values(33);

SQL> update wdt_test set test = 88;

SQL> select * from wdt_log order by log_no; --结果只有1条记录、证明触发器只工作了一次

将触发器代码中的 for each row 解开注释,变成行触发,再继续测试。

SQL> update wdt_test set test = 99;

SQL> select * from wdt_log order by log_no; --结果有3条记录、证明触发器按行工作了3次

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值