oracle数据库什么时候用语句级触发器,什么时候用行级触发器
1.
行级触发器对DML语句影响的每个行执行一次。
语句级触发器对每个DML语句执行一次,如果在TABLE表中插入的数据为500行,那么这个表上的语句级触发器只执行一次,而行级的触发器就要执行500次了。
2.
语句级别触发器
是在表上或者某些情况下的视图上执行的特定语句或者语句组上的触发器。能够与INSERT、UPDATE、DELETE或者组合上进行关联。但是无论使用什么样的组合,各个语句触发器都只会针对指定语句激活一次。比如,无论update多少行,也只会调用一次update语句触发器。
例子:需要对在表上进行DML操作的用户进行安全检查,看是否具有合适的特权。
createtriggertri_study
beforeinsertorupdateordeleteonzrp
begin
ifusernotin(‘DONNY’)then
Raise_application_error(-20001,‘Youcannotaccesstomodifythistable.’);
endif;
end;
2、行触发器
是指为受到影响的各个行激活的触发器,定义与语句触发器类似,有以下两个例外:
1、定义语句中包含FOREACHROW子句
2、在BEFORE……FOREACHROW触发器中,用户可以引用受到影响的行值。
定义:
createtriggertri_study
beforeinsertorupdate
ofdepartment_id
onemployees_copy
referencingoldasold_value
newasnew_value
foreachrow
when(new_value.department_id<>80)
begin
:new_value.commission_pct:=0;
end;