第6章 触发器.docVIP

  • 16
  • 0
  • 约7.68千字
  • 约 8页
  • 2016-08-30 发布于浙江
  • 举报
第6章 触发器

第6章 触发器 课程目标。 理解和应用触发器; 触发器是当特定事件出现时自动执行的代码块。触发器与过程的区别是,触发器是不能被直接调用的。而过程是由用户或应用程序显式调用的。 触发器与特定的表或视图关联,用于检查对表或视图所做的数据修改。无论正在执行操作的用户身份如何,触发器都能够在他们执行操作时生效。当insert、delete或update等事件发生在表或视图中时,就会激活触发器中的代码。 创建触发器的语法如下。 其中: before和after:指在事件发生之前或之后激活触发器。 Instead of:表示可以执行触发器代码来代替触发器调用的事件。只用于视图。 Insert、delete、update:表示调用触发器代码的事件。 Referencing:指定新行(即将更新)和旧行(更新前)的其他名称。默认为NEW和OLD。 For each row:指定是否对受影响的每行都执行触发器。即行级触发器。如果不使用该子句,则为语句级触发器(不管影响多少行,包括零行)。 When:限制执行触发器的条件。 Declare …… end:是一个标准的PL/SQL块。 例一。演示如何在scott模式的emp表上创建触发器。 一、触发器的组成部分。 触发器由触发器语句、触发器限制和触发器操作3部分组成。 1、触发器语句。 触发器语句是哪些可以导致触发器的事件。如上例的第2、3、4行,就构成了触发器语句。也就是说,触发器在定义的事件之前就已经生成,当对emp表执行insert或对emp表的deptno执行update操作时,触发器将在受到影响的每一行上执行一次。但是,触发器是否真正执行还要检查触发器限制条件,只有满足限制条件才会执行。 2、触发器限制。 触发器限制条件包含一个布尔表达式,该值必须为真才能激活触发器。如果该值为“假”或“未知”,将不运行触发操作。如上例中的第5行。 3、触发器操作。 触发器操作是触发器的主体,包含一些sql语句和代码。如上例中的第6、7、8行。 二、触发器类型。 1、行级触发器 行级触发器对DML语句影响的每个行执行一次。如,update语句影响多行时,就会对每行都激活一次行触发器。行触发器是触发器中最常用的一种,通常用于数据库审计和实现复杂的业务逻辑。可以在create trigger命令中指定for each row子句创建行级触发器。 由于触发器是事件驱动的,因此可以设置触发器在这些事件之前或之后执行。即在执行DML语句之前或之后执行。在触发器中,可以引用DML语句中涉及的旧值或新值。“旧”是指在DML语句之前存在的数据。UPDATE和DELETE通常应用旧值。“新”是指由DML语句创建的数据值(如插入记录中的列)。 如果需要通过触发器在插入行中设置一个列值,就应该使用before insert触发器访问“新”值。使用after insert 触发器不允许设置插入值,因为该行已经插入表中。 例二。演示行级触发器的应用 从上例可以看出,表的id字段的值是由触发器自动产生的。使用了before insert。如果一个触发器由多种语句触发,可以使用inserting,updating,deleting条件谓词来检查,如上例中使用了inserting。条件谓词只能在触发器主体中引用。 2、语句级触发器。 语句级触发器对每个DML语句只执行一次。如果一条insert语句在表中插入200行,那么这个表上的insert语句级触发器只执行一次。语句级触发器不常用于与数据相关的活动,通常用于强制实施在表上执行操作的额外安全性措施。语句级触发器是create trgger命令创建的触发器的默认类型。 例三。演示如何创建语句级触发器。 3、instead of 触发器 instead of触发器是在视图上而不是在表上定义的触发器,它是用来替换所使用实际语句的触发器。Instead of 触发器只能在行级使用,不能在语句级使用。只能用于视图,不能用于表。 如果需要同时向两个表中插入值,可以通过使用instead of触发器来实现。 例四。演示了在表order_master 和order_detail上创建视图,以完成同时向两个表中插入值的操作。 上面代码创建了两个表的连接查询的视图。 要检查上述触发器是否触发正确,请在视图上给出insert语句并检查是否按所需要求更新或插入了行。 4、模式触发器 该触发器建立在用户模式上。只要该用户执

文档评论(0)

1亿VIP精品文档

相关文档