- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
9.1数据库触发器.doc
Oracle数据库设计与实现 理 论 部 分
第九章 数据库触发器和内置程序包
PAGE 230
PAGE 231
理 论 部 分
第九章 数据库触发器和内置程序包
本章目标:
完成本章内容以后,您将能够:
讨论数据库触发器
讨论内置程序包
简介
通过本章的学习,可以深入了解数据库触发器。本章还涉及触发器的各组成部分以及触发器的各种类型。还阐明了各种DBMS程序包的用途。
9.1 数据库触发器
数据库触发器是一个对关联表发出insert、update或delete语句时触发的存储过程。数据库触发器可用于以下目的:
自动生成数据。
强制复杂的完整性约束条件。(例如,使用sysdate进行检查,使用另一个表中的数据进行检查)。
自定义复杂的安全权限。
维护复制的表。
审计数据修改。
创建触发器的语法
创建触发器的语法如下所示。
Create or replace Trigger Trigger_name
[before/after] [insert/update/delete] on table-name
[referencing {old [as] old / new [as] new}]
[for each statement/ for each row ] [when condition ] pl/sql_block
其中,Trigger_name是触发器名称,table-name是表名。
数据库触发器还可以包含声明部分和异常处理部分。
9.1.1 触发器的组成部分
数据库触发器包括三个部分,即触发器语句、触发器主体和触发器限制。
触发器语句
触发器语句指定诸如UPDATE、DELETE和INSERT之类的DML语句,它触发触发器主体。它还指定触发器的关联表。
触发器主体
触发器主体是在发出触发语句时执行的PL/SQL块。
触发器限制
可以使用WHEN子句实现对触发器的限制,如创建触发器的语法所示。它们可以包括在行触发器的定义中,在其中,对于受触发器影响的每个行,都计算WHEN子句中的条件。
注释:子查询不能包括在WHEN子句中。
9.1.2 触发器的类型
触发器有以下两种类型:
应用程序触发器
数据库触发器
应用程序触发器
每当应用程序内发生特定DML事件时,都将隐式触发此触发器。例如,Oracle Forms Developer是一个大量使用触发器的应用程序。
数据库触发器
每当在表、视图、方案或数据库上发生特定DML事件时,都将隐式触发触发器。数据库触发器可以在表和视图上进行定义。INSTEAD OF触发器用于定义要在视图上执行的DML操作。在数据库或方案上,数据库触发器也可以充当系统触发器。
创建DML触发器
编写触发器的第一步是确定触发器各组件的值。以下是DML触发器组件:
触发器定时
触发器事件
表名
触发器类型
WHEN子句
触发器主体
表9.1描述重要组件的用法:
表9.1:DML触发器组件
组件描述可能的值有触发器定时定义触发器相对于触发事件的触发时间BEFORE
AFTER
INSTEAD OF触发器事件定义表或视图上导致触发器触发的DML操作INSERT
UPDATE
DELETE触发器类型定义触发器主体应该执行的次数Statement(语句)
Row(行)触发器主体定义触发器应该执行的操作完整的 PL/SQL 块在随后的主题中,我们将讨论触发器定时。该定时定义触发器主体应该执行的时间,以及执行级别是Statement级还是Row级。
Before/After
For each row/Statement(后者为默认值)
BEFORE/AFTER选项
BEFORE/AFTER选项指定对于触发语句应该触发触发器主体的时间。如果用户包括BEFORE选项,则Oracle在执行触发语句之前触发触发器。反之,如果使用AFTER,则Oracle在执行触发语句之后触发触发器。
For Each Row/Statement
“create trigger”语法中的For each row选项指定触发器在每行上触发一次。默认情况下,数据库触发器对每条语句触发一次。
使用以上选项的组合,可以为数据库表指定12类触发器。
BEFORE UPDATE for each row/statement
AFTER UPDATE for each row/statement
BEFORE DELETE for each row/statement
AFTER DELETE for each row/statement
BEFORE INSERT for each row/statement
AFTER INSERT for each r
文档评论(0)