触发器说明

触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由个事件来启动运行。即触发器是当某个事件发生时自动地隐式运行。并且,触发器不能接收参数。所以运行触发器就叫触发或点火(firing)。ORACLE事件指的是对数据库的表进行的INSERT、UPDATE及DELETE操作或对视图进行类似的操作。ORACLE将触发器的功能扩展到了触发ORACLE,如数据库的启动与关闭等。所以触发器常用来完成由数据库的完整性约束难以完成的复杂业务规则的约束,或用来监视对数据库的各种操作,实现审计的功能。

 

触发器类型

DML触发器

对数据表进行DML语句操作(如insert、update、delete)时所触发的触发器,可以分为:

语句级触发器和行级触发器:行级触发器会对数据库表中的受影响的每一行触发一次触发器代码,语句级触发器则只触发一次,与语句所影响到的行数无关。

before触发器和after触发器:before触发器在触发事件发生之前执行触发器代码,after触发器则在触发事件发生之后执行。

语法:
create [or replace] trigger trigger_name
{before | after} trigger_event
referendcing old as old new as new
on table_name
[for each row]
begin
  insert into T_USER_SCHEDULE_DELETE(SCHEDULE_ID,OWNER,DELETE_DATE)values(:OLD.SCHEDULE_ID,:OLD.OWNER);
end;

 

  • trigger_name:触发器名称
  • bofore | after:指定触发器是在触发事件发生之前触发还是发生之后触发
  • trigger——event:触发事件,在DML触发器中主要为insert、update、delete等
  • table_name:表名,表示发生触发器作用的对象
  • for each row:指定创建的是行级触发器,意味着每操作成功一行就会触发一次;不写的话,表示是表级触发器,则无论操作多少行,都只触发一次
  • referendcing old as old new as new:referendcing old 和 referendcing new的差异取决于触发器是行级还是语句级触发器。对于行级触发器,referendcing old子句允许引用更新或删除之前行中的值,referendcing new子句允许引用已插入或更新的值。在before和after触发器中可以引用old和new行。referendcing new子句允许在插入或更新操作发生之前在before触发器中修改新行。

:new和:old使用方法和意义,new只出现在insert和update时,old只出现在update和delete时。在insert时new表示新插入的行数据,update时new表示要替换的新数据、old表示要被更改的原来的数据行,delete时old表示要被删除的数据。

begin 前面出现的 new,old不加冒号,begin和end之间出现的new和old都要在前面加上" : "。

 

posted on 2019-04-25 20:54  FuYingju  阅读(58)  评论(0编辑  收藏  举报