Oracle数据库应用教程(朱亚兴) 第8章.ppt

Oracle数据库应用教程(朱亚兴) 第8章.ppt

  1. 1、本文档共89页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 触 发 器 8.1 触发器简介   触发器是一种特殊的存储过程,当特定对象上的特定事件出现时,将自动触发执行的代码块。触发器比数据库有更精细和更复杂的数据控制能力。触发器与过程的区别在于:过程要由用户或应用程序显式调用,而触发器是满足特定事件时在数据库后台自动执行。数据库触发器具有以下功能:   (1) 实现复杂的数据完整性规则。   (2) 自动生成派生数据。   (3) 提供审计和日志记录。   (4) 启用复杂的业务逻辑。   (5) 实施更复杂的安全性检查。   (6) 防止无效的事务处理。 8.2 触发器的格式   所有的触发器,不管其类型如何,都可以使用相同的语法创建。下面先简单了解一下Oracle产生数据库触发器的基本语法:   create [or replace] trigger 触发器名 触发时间 触发事件   on 对象名    [for each row]   pl/sql 语句   说明:触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。   触发时间:指明触发器何时执行,取值有before和after。   before表示在数据库动作之前触发器执行;   after表示在数据库动作之后触发器执行。   触发事件:指明哪些数据库动作会触发此触发器,比如,   insert表示数据库插入会触发此触发器;   update表示数据库修改会触发此触发器;   delete表示数据库删除会触发此触发器。   对象名:数据库触发器所在的表名、数据库名或模式用户名。   for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。   【例8.1】 在student表上建立触发器。在更新表student之前触发,目的是不允许在周末修改表。   SQLcreate trigger student_secure   2? before insert or update or delete? --对整表在插入、更新、删除前触发   3? on student   4? begin   5? if(to_char(sysdate,DY)=SUN) then   6? RAISE_APPLICATION_ERROR(-20600,不能在周末修改表student);   7? end if;   8? end;   9 /   一般来说,触发器由触发器名称、触发器语句、触发器限制和触发器操作几部分组成。下面是创建触发器的通用语法:   1 CREATE [OR REPLACE] TRIGGER trigger_name   2 {BEFORE | AFTER | INSTEAD OF}   3 triggering_event { dml_event_list | ddl_event_list| database_event_list}   4 ON trigger_object { [database] | [schema.] [table_or_view_name]}   5 referencing_clause   6 [FOR EACH ROW]   7 [WHEN trigger_condition]   8 trigger_body   其中,第1行指明创建的触发器名称,第2~6行为触发器语句,第7行为触发器限制,第8行为触发器操作。   说明:   trigger_name是触发器的名称。   触发器语句是指在相应数据库对象上触发的时间及导致触发器执行的事件等。tiggering_event表示触发事件,比如表或视图上的dml语句、ddl语句、数据库关闭或启动等。其中,dml_event_list是一个或多个DML事件,包括INSERT、UPDATE、DELETE语句,事件之间用“OR”分隔;ddl_event_list是一个或多个DDL事件,包括CREATE、ALTER或DROP语句;database_event_list是一个或多个数据库事件,包括服务器的启动或关闭、用户的登录或退出以及服务器错误等。referencing_clause用来引用正在处于修改状态下的行中的数据。   WHEN子句代表触发器限制条件,包含一个布尔表达式,即在 WHEN子句中如果指定trigger_condition,则首先对该条件求值。只有在该条件为真值时才运行。   触发器操作即触发器主体包含一些SQL语句和代码。   【例8.2】 在employees表上构建一个触发器,在插入或修改部门号时触发,如果该雇员部门号不是“80”,则comm

您可能关注的文档

文档评论(0)

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

1亿VIP精品文档

相关文档