我是一个Java爱好者
分类: Oracle
2009-05-20 11:44:04
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
--referencing new as new_record --新记录
--old as old_record
declare
begin
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次