文档详情

第八章理论课触发器和内置程序包.pdf

发布:2018-04-07约1.99万字共17页下载文档
文本预览下载声明
《Oracle 数据库应用 》理论课 触发器和内置程序包  本章技能目标  理解和应用触发器  了解内置程序包 1. 触发器 触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,触发器与存储过程的区 别在于:存储过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。  触发器可以用于加载Oracle 的默认功能,提供高度可定制的数据库,触发器能够执行的功 能有: 1、 允许/ 限制对表的修改 2、 自动生成派生列,比如自增字段 3、 强制数据一致性 4、 提供审计和日志记录 5、 防止无效的事务处理 6、 启用复杂的业务逻辑 触发器与特定的表或视图相关联,用于检查对表或视图所做的数据修改。无论正在执行操作的 用户身份如何,触发器都能够在它们执行操作时生效。当INSERT,DELETE ,UPADTE 等事件 发生在表或视图中时,就会激活触发器的代码。 用于创建触发器的语法为: CREATE [OR REPLACE] TRIGGER trigger_name AFTER | BEFORE | INSTEAD OF [INSERT] [[OR] UPDATE [OF column_list]] [[OR] DELETE] ON table_or_view_name [REFERENCING {OLD [AS] old / NEW [AS] new}] [FOR EACH ROW] [WHEN (condition)] pl/sql_block; 其中: 第8 章 触发器和内置程序包 before 和after :指在事件发生之前或之后激活触发器。 instead of :如果使用此子句,表示可以执行触发器代码来代替导致触发器调用的事件。 insert、delete 和update :指定构成触发器事件的数据操纵类型,update 还可以制定列的列表。 referencing :指定新行(即将更新)和旧行(更新前)的其他名称,默认为new 和old 。 table_or_view_name :指要创建触发器的表或视图的名称。 for each row:指定是否对受影响的每行都执行触发器,即行级触发器,如果不使用此子句,则 为语句级触发器。 when :限制执行触发器的条件,该条件可以包括新旧数据值得检查。 declareend :是一个标准的PL/SQL 块。 例1 演示如何在SCOTT 模式的EMP 表上创建触发器。 例1: CREATE OR REPLACE TRIGGER biu_emp_deptno BEFORE INSERT OR UPDATE OF deptno ON emp FOR EACH ROW WHEN (New.deptno 40) BEGIN :Nm := 0; END; / 提示:如果创建触发器时出现错误,请使用SHOW ERRORS 命令查看详细的错误信息。 1.1 触发器的组成部分 触发器由三部分组成:  触发器语句(事件)  定义激活触发器的 DML 事件和 DDL 事件  触发器限制  执行触发器的条件,该条件必须为真才能激活触发器  触发器操作(主体)  包含一些 SQL 语句和代码,它们在发出了触发器语句且触发限制的值为真时运 行  触发器语句 触发器语句是那些可以导致触发器的事件,即在表或视图上执行的INSERT ,DELETE ,UPADTE 之类的DML 语句,在模式对象上执行的DDL 语句或数据库事件。 在例1 触发器中,第2 行至第四行,如下代码所示,构成了触发器语句。 BEFORE INSERT OR UPDATE OF deptno ON emp FOR EACH ROW 这就是说,触发器会在这些事件之前隐式执行:当对EMP 表执行INSERT 语句时或对EMP 表 的deptno 列进行UPADTE 时。
显示全部
相似文档