数据库

 首页 > 数据库 > Oracle > oracle数据库语句级触发器和行级触发器的使用

oracle数据库语句级触发器和行级触发器的使用

分享到:
【字体:
导读:
         摘要:1.行级触发器对DML语句影响的每个行执行一次。语句级触发器对每个DML语句执行一次,如果在TABLE表中插入的数据为500行,那么这个表上的语句级触发器只执行一次,而行级的触发器就要执行500次了。2.语句级别触发器... SyntaxHighlighter.all(); ...

oracle数据库语句级触发器和行级触发器的使用
1. 
行级触发器对DML语句影响的每个行执行一次。 
语句级触发器对每个DML语句执行一次,如果在TABLE表中插入的数据为500行,那么这个表上的语句级触发器只执行一次,而行级的触发器就要执行500次了。 
2. 
语句级别触发器 
是在表上或者某些情况下的视图上执行的特定语句或者语句组上的触发器。能够与INSERT、UPDATE、DELETE或者组合上进行关联。  www.2cto.com  但是无论使用什么样的组合,各个语句触发器都只会针对指定语句激活一次。比如,无论update多少行,也只会调用一次update语句触发器。 
例子:需要对在表上进行DML操作的用户进行安全检查,看是否具有合适的特权。 
 
create trigger tri_study 
 
  before insert or update or delete on zrp 
 
begin 
 
  if user not in (‘DONNY’) then 
 
  Raise_application_error(-20001, ‘You can not access to modify this table.’); 
 
  end if; 
 
end; 
 
2、 行触发器 
 
是指为受到影响的各个行激活的触发器,定义与语句触发器类似,有以下两个例外: 
 
1、 定义语句中包含FOR EACH ROW子句   www.2cto.com  
 
2、 在BEFORE……FOR EACH ROW触发器中,用户可以引用受到影响的行值。 
 
定义: 
 
create trigger tri_study 
 
  before insert or update 
 
  of department_id 
 
  on employees_copy 
 
  referencing old as old_value 
 
  new as new_value 
 
  for each row 
  www.2cto.com  
  when (new_value.department_id<>80 ) 
 
begin 
 
  :new_value.commission_pct :=0; 
 
end; 
 

 
作者 vvssonline
oracle数据库语句级触发器和行级触发器的使用
分享到:
SQL共享:父游标和子游标的问题
SQL共享:父游标和子游标的问题 解析操作的结果是将一个父游标和子游标保存到library cache中,将它们保存到sga,是为了重用它们,从而避免硬解析。 在什么情况下可以重用父游标和子游标呢? 父游标的关键信息是sql文本;子游标的关键信息是执行计划和执行环境。 通过v$sqlarea查询父游标的信息;v$sql查询子游标的信息...
Oracle SQL执行计划变更的问题
Oracle SQL执行计划变更的问题 oracle的执行计划经常会遭遇绑定变量窥视问题,导致执行计划变更,引起数据库负载飙升,带来性能问题。 昨天有段时间,数据库负载报警,cpu使用率近100%。 今天通过awr发现,等待事件第一位的是read by other session;SQL Statistics 中几乎都是同一条sql排在第一:56s18gn1k19yp 该sql...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……