游标和触发器教学PPT课件.ppt
文本预览下载声明
14.1 概述 触发器是当特定事件出现时自动执行的存储过程 特定事件可以是执行更新的DML语句和DDL语句 触发器不能被显式调用 使用触发器可以完成的功能如下: 允许或限制对表的修改; 自动生成派生列; 强制数据一致性; 提供审计和日志记录; 防止无效的事务处理; 启用复杂的业务逻辑。 在Oracle系统中,触发器有4个组成部分,即触发器名称、触发语句、触发器限制和触发操作。下面详细介绍这些组成部分。 例子 --触发器create or replace trigger tri_emp_empnobefore insert or update --insert or update 意思是指insert 或update语句执行时就触发on emp --触发器依赖的表for each row --行触发器begin :m:=0; end; --测试 select * from emp;update emp set sal=1301 where empno=7934;update emp set sal=sal*1.01; 触发器名称 触发器名称就是触发器的名称。数据库中的每一个对象都有名称,触发器对象也不例外。一般应该采用描述性名称来定义触发器名称。在触发器名称中,应该包括触发器执行的时间、执行的操作、涉及的表和列等。 下面是一个定义触发器部分语句的示例: create trigger trigger_emp_empno 触发语句 触发语句就是那些导致Oracle执行触发器的事件。触发器事件可以是下面的内容: 表和一些视图上的数据操纵语言语句,例如insert、update、delete; 模式对象上的数据定义语言语句,例如create、alter、drop; 数据库的启动和关闭; 系统错误; 各种系统活动。 触发器限制 即使导致触发器激活的事件发生了,但是也不意味着Oracle就会执行它。激活事件发生之后,触发器首先判断在触发器上是否存在限制,然后才会在执行触发器之间评估所有的限制。 某个限制条件可能如下: when(new_value.empno7782) 触发操作 触发操作是触发器的主体。当发生如下两件事情时Oracle才会执行代码块: 使用了合适的语句; 如果提供了触发器限制,则评估为真。 触发器的类型 Oracle系统有5种类型的触发器。每一种类型的触发器都可以完成不同的任务。这5种类型的触发器分别是:语句触发器、行触发器、instead of触发器、系统事件触发器和用户事件触发器。 触发器类型 用户事件 触发器 DML 触发器 系统事件触发器 语句级触发器 行级触发器 INSTEAD OF触发器 14.2 语句触发器 语句触发器是在表上或某些视图上执行的特定语句的触发器。语句触发器能够与insert、update或delete语句或这些语句的任意组合关联。用户既可以在表的insert或update语句上使用单独的触发器,也可以在表的insert和update语句的组合上使用触发器,甚至可以在单独的表上拥有多个insert语句触发器。 创建语句触发器 用户可能希望在表上创建进行安全检查的insert、update或delete语句触发器,以便根据用户的具体业务规则验证正在进行操作的用户是否具有指定的权限。 这种类型的简单触发器如图14-1所示。 级联触发器 这里需要考虑的是级联触发器的概念。这个概念意味着用户触发器的操作将会导致另一个触发器激活,以此类推。如果用户有3个表A、B和C。在表A上有一个insert触发器,它会向表B中插入一行。而在表B上有一个向表C插入一行的触发器,那么这就是级联触发器。 在开发应用程序时,一定要注意这种现象,因为这种级联可能会对性能产生影响,甚至可能带来不可预料的后果。 修改触发器 可以使用create or replace命令更新或改变触发器。该命令可以改变触发器的主体、限制子句等。也可以从根本上重新定义触发器。如果需要,可以使用create or replace命令处理某个触发器,将其从foo表上的insert类型触发器改变为bar表上的update触发器。 为了从数据库中删除触发器,可以使用 drop trigger trigger_name命令。 确定哪个语句起作用 在很多情况下,需要知道哪个语句导致了触发器被激活。如果只在一种类型的语句上建立触发器,那么这是一件非常简单的事情。但是,如果创建了一个触发器,但是该触发器针对多种类型的语句,那么想要知道是哪个语句导致了触发器的激活,这好像是很难的事情。 实际上,这也很简单,用户可以询问Oracle是哪一个语句导致了触发器被激活。所需的事情就是引用inserting、upd
显示全部