[21天学通Oracle 第二版] 第10章 触发器ppt.ppt

[21天学通Oracle 第二版] 第10章 触发器ppt.ppt

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

第10章 触发器 触发器是数据库常用对象之一。触发器的主要部分是代码块,一旦创建了触发器,在条件成立时,代码块将自动执行。触发器的好处在于,用户只需建立触发器,而无需对其进行任何人为控制,数据库将会精确地完成触发器任务。 语句触发的创建和使用; 行触发器的创建和使用; INSTEAD OF触发器的创建和使用; 系统和用户事件触发器的创建和使用。 10.1 触发器简介 在结构上,触发器非常类似于存储过程,都是实现特殊的功能而执行的代码块。不过,触发器不允许用户显式传递参数,不能够返回参数值,也不允许用户调用触发器。触发器只能由Oracle在合适的时机自动调用。 在功能上,触发器非常类似于面向切面编程中的拦截器。可以在动作执行之前或者执行之后,再进行其他自定义操作。 触发器按照触发事件类型和对象不同,可以分为以下几类:语句触发器、行触发器、instead of触发器、系统事件触发器和用户事件触发器。 10.2 创建和使用触发器 本节将通过一个简单的实例,讲述如何创建和使用触发器。为了方便演示,首先创建名为t_employees和t_salary的数据表。 10.2.1 创建触发器 以表t_employees为例,现欲向其插入一条新的数据,以表示新加入的员工。但是在插入之前,需要首先将其服务年限字段——work_yeas设为0,以防插入者错误输入。那么,可以创建一个触发器,在插入动作之前执行,强制将work_yeas置为0。 create or replace trigger tr_before_insert_employee before insert on t_employees for each row begin :new.work_years := 0; end; insert into t_employees values (12, 周兴, 5, ACT); 注意,在创建语句中,自create or replace trigger起至end语句至,是一个完整的创建语法——描述触发器、定义触发器的代码块。在触发器描述和代码块中间不能出现分号。 10.2.2 触发器的作用级别 在创建触发器时,应该特别注意其级别。表级触发器的常见应用场景并不在于限制数据,而是更多应用于整个表的控制。例如,当向数据表中插入数据时,可以限制当前用户是某个用户才可以进行插入操作。 create or replace trigger tr_before_insert_employee before insert on t_employees begin :new.work_years := 0; end; create or replace trigger tr_before_insert_employee before insert on t_employees begin if user != ADMIN then raise_application_error(-20001, 权限不足,不能向数据表中插入数据); end if; end; 10.2.3 在多个事件上定义触发器 在范例10-1中,为表t_employees添加了触发器。该触发器将在insert动作之前执行。其实,可以为多个事件同时定义触发器。例如,在表t_employees中,含有status字段,该字段标识了当前的员工信息是否有效。为了保证该数据表中的status字段值都为大写形式,可以对update和insert两个事件同时定义触发器,将status字段的新值转换为大写形式。 create or replace trigger tr_insert_update_employee before insert or update on t_employees for each row begin :new.status := upper(:new.status); end; 10.2.4 为同一事件定义多个触发器 如果为同一对象的同一事件定义了多个触发器,那么,这些触发器都将被触发。触发的顺序按照触发器名称的字母表顺序,排在较前位置的将首先触发。 首先为表t_employees每行的before insert创建了触发器,该触发器用于将所有新进员工的服务年限强制设为0;同时,为每行的before insert创建了触发器,该触发器可以将status的值转换为大写形式。那么尝试向其中插入如下数据。 insert into t_employees values(13, 周亚,

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档