Oracle中的触发器

来源:互联网 发布:linux tar.xz如何安装 编辑:程序博客网 时间:2024/05/14 03:40

                     Oracle中的触发器

  oracle中,触发器是一种特殊的子程序,它在插入、更新、删除数据时自动执行。使用触发器可以实现比较复杂的约束。(PK FK UQ CK DF都是单表约束数据完整性。)

触发器可以分为INSERT触发器、UPDATE触发器、DELETE触发器。INSERT 触发器在对表或视图执行INSERT语句时触发,UPDATE触发器在对表或视图执行UPDATE操作时执行,DELETE触发器在对表或视图执行DELETE操作时执行。

在触发器中有两个变量非常重要,它们是NEWOLDNEW表示新添加的值,OLD表示原来的值

触发器的语法如下:

Create [or replace] trigger 触发器名称

{before |after|inserted of}1

{insert|update|delete[of  1,列2…]}2

[or  {insert |update|delete[of  1,列2….]}]

On  表或视图名

[refrencing  [new as别名] [old as 别名]]3

[for each row]4

[when (条件)]5

[declare  变量声明]

Begin

触发器主体

[exception  异常处理]

End [触发器名称]

需要解释的是:1处表示触发器是在操作之前还是在之后触发,举例若是验证数据的合法性,可在前验证后插入。不过inserted of是针对视图来说的对于视图操作时,触发器的处理代码则替代对视图的操作2表示触发器的类型,表示哪一种触发器,并且是在操作那一列时触发的限定条件,操作该列可触发触发器3refrencing:触发器对insertupdatedelete操作时,存在新旧数据的问题,新数据采用new对象表示,旧数据采用old对象来表示,在insert中,new表示要插入的数据,此时old没有意义。在delete中,old表示已删除的数据,此时new没有意义。在update中,new表示已更新的新数据,old表示更新前的旧的数据。Newold是记录对象,refrencing子句可以对newold指定一个别名。4表示是行级触发器,每次对行操作时,都会触发触发器,处理代码都会执行。如果没有,则只触发一次,处理代码只执行一次。5限制触发器的条件,表示什么时候执行触发器。

另外注意的是,触发器和触发语句同在一个屋檐(事务)下,一起提交执行,一起回滚。

如下例子:insert触发器

create or replace trigger trigger_insert

after

insert

on testss

for each row

  begin

   insert into testtime values(:new.id,:new.names,sysdate);

end;

当向testss中插入数据时,则触发trigger_insert触发器,目的是向名称为testtime的表中插入记录,记录操作者名称和操作时间。其中的:new.id是代表的testss中的id,同样的:new.names也代表的是testss中的names属性。Sysdate是系统时间。

其他两个触发器updatedelete触发器和insert触发器的使用方法方式基本相同,不在赘述。那么使用触发器的好处是什么呢?个人觉得触发器就像是机关或者说是地雷,在满足一些条件的时候,自动的做一些事情,是事情变得简单易处理。例如银行的数据库应该会有很多的触发器,每一步或每一次的数据库操作都会触发触发器,记录相应的操作过程或操作数据,会有大量的操作文档,保证数据的安全和完整性。总之,触发器就是满足一定的条件之后就去执行一些动作,跟if语句有点像,我们想做些什么,只要写好处理语句,再写好触发条件就ok了。

原创粉丝点击