第11章 触发器的创建与应用.ppt

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章 触发器的创建与应用

触发器可以帮助用户完成许多特殊的功能: 启用复杂的业务逻辑。 强制数据的完整性和一致性。 提供审计和日志记录。 自动生成派生列。 防止某些无效的事务处理。 在Oracle系统中,触发器包括以下几个组成部分: 触发器名称 触发语句 触发限制条件 触发器操作 11.2 触发器类型 按照触发的时间,将触发器分为: BEFORE触发器,指事前触发器 在触发语句执行前触发器被触发 AFTER触发器,指事后触发器 在触发语句执行以后触发器被触发 INSTEAD OF触发器,指替代触发器 触发语句被触发器操作替代 11.2 触发器类型 按照触发的事件,将触发器分为: DML触发器,对表或视图执行DML操作时触发的触发器 可以定义为事前触发也可以定义为事后触发 按照触发时DML操作影响的记录多少,DML触发器又可分为: 行级触发器 :DML语句每操作一行,行级触发器就会被调用一次 语句级触发器 :DML语句不论影响多少行数据,语句级触发器只被调用一次 DDL触发器,在数据库中执行DDL操作时触发的触发器 可以定义为事前触发也可以定义为事后触发 DDL触发器又可以分为: 数据库级DDL触发器 :数据库中任何用户执行了相应的DDL操作该类触发器都被触发。 用户级DDL触发器 :只有在创建触发器时指定方案的用户执行相应的DDL操作时触发器才被触发,其他用户执行该DDL操作时触发器不会被触发。 用户事件触发器,这类触发器是指与用户执行的DCL操作或LOGON/LOGOFF操作相关的触发器 有些允许事前触发,有些允许事后触发。 该类触发器可以定义在数据库级被所有用户触发,也可以定义在用户级被指定用户触发。 系统事件触发器:是指由数据库系统事件触发的触发器 有些允许事前触发,有些允许事后触发。 也可以分为用户级和数据库级两种。 通常情况下使用的触发器都是组合类型的触发器,如事前行级触发器 、事前语句级触发器等。 但并不是任何类型的触发器都可以组合在一起,如LOGON和STARTUP事件的触发器只能选择事后触发,而LOGOFF和SHUTDOWN事件的触发器只能选择事前触发。 11.3.1 创建DML事件触发器 创建DML触发器的格式如下: CREATE [OR REPLACE] TRIGGER [schema.]trigger_name {BEFORE | AFTER} {INSERT | UPDATE | UPDATE OF column1 [, column2 [, …]] | DELETE} ON [schema.]table_name | [schema.]view_name [FOR EACH ROW] [WHEN (logical_expression)] [DECLARE] declaration_statements; BEGIN execution_statements; END [trigger_name]; 1.语句级触发器 创建触发器时若未使用FOR EACH ROW子句,则该触发器称为语句级触发器。 DML语句执行之前或之后,触发器只被触发一次。 例11.1 为scott.emp表创建一个事后语句级触发器。当用户向emp表中插入新数据后,该触发器将统计emp表中的新行数并输出。 CREATE OR REPLACE TRIGGER tri1_insert_emp AFTER INSERT ON scott.emp DECLARE rows NUMBER; BEGIN SELECT count(*) INTO rows FROM scott.emp; dbms_output.put_line( emp表中当前包含||rows||条新记录); END; 从该例子中可以看出:在语句级触发器的操作部分可以访问触发表,但在后面要讲的行级触发器中不允许访问触发表 ,自行分析原因。 例11.2 创建一个事前语句级触发器tri_update_emp,当用户对表scott.emp中的deptno字段进行UPDATE操作时该触发器被触发。 CREATE OR REPLACE TRIGGER tri_update_emp BEFORE UPDATE OF deptno ON scott.emp BEGIN dbms_output.put_line(您正在修改表emp的deptno列); END tri_update_emp; 2.行级触发器 创建触发器时若使用了FOR EACH ROW子句,则该触发器称为行级触发器。 DML语句每操作一行记录,行级触发器就被触发一次,当DML命令影响多行记录时行级触发器就被触发多次。 行级触发器的重要特点: 可以在触发器中引用当前DML命令正在操

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档