- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
65
第八章 触发器
触发器是许多关系数据库系统都提供的一项技术。在ORACLE 系统里,触发器类似过
程和函数,都有声明,执行和异常处理过程的PL/SQL 块。
§8.1 触发器类型
触发器在数据库里以独立的对象存储,它与存储过程不同的是,存储过程通过其它程序
来启动运行或直接启动运行,而触发器是由一个事件来启动运行。即触发器是当某个事件发
生时自动地隐式运行。并且,触发器不能接收参数。所以运行触发器就叫触发或点火(firing )。
ORACLE 事件指的是对数据库的表进行的INSERT、UPDATE 及DELETE 操作或对视图进
行类似的操作。ORACLE 将触发器的功能扩展到了触发ORACLE,如数据库的启动与关闭
等。
§8.1.1 DML 触发器
ORACLE 可以在DML 语句进行触发,可以在DML 操作前或操作后进行触发,并且可
以对每个行或语句操作上进行触发。
§8.1.2 替代触发器
由于在ORACLE 里,不能直接对由两个以上的表建立的视图进行操作。所以给出了替
代触发器。它就是ORACLE 8 专门为进行视图操作的一种处理方法。
§8.1.3 系统触发器
ORACLE 8i 提供了第三种类型的触发器叫系统触发器。它可以在ORACLE 数据库系
统的事件中进行触发,如ORACLE 系统的启动与关闭等。
触发器组成:
触发事件:即在何种情况下触发TRIGGER; 例如:INSERT, UPDATE, DELETE。
触发时间:即该 TRIGGER 是在触发事件发生之前(BEFORE)还是之后(AFTER)触
发,也就是触发事件和该TRIGGER 的操作顺序。
触发器本身:即该TRIGGER 被触发之后的目的和意图,正是触发器本身要做的事情。
例如:PL/SQL 块。
触发频率:说明触发器内定义的动作被执行的次数。即语句级(STATEMENT)触发器和
行级(ROW)触发器。
语句级(STATEMENT)触发器:是指当某触发事件发生时,该触发器只执行一次;
行级(ROW)触发器:是指当某触发事件发生时,对受到该操作影响的每一行数据,触
发器都单独执行一次。
- 65 -
66
§8.2 创建触发器
创建触发器的一般语法是:
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER }
{INSERT | DELETE | UPDATE [OF column [, column …]]}
ON [schema.] table_name
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ]
[WHEN condition]
trigger_body;
其中:
BEFORE 和AFTER 指出触发器的触发时序分别为前触发和后触发方式,前触发是在
执行触发事件之前触发当前所创建的触发器,后触发是在执行触发事件之后触发当前所创建
的触发器。
FOR EACH ROW 选项说明触发器为行触发器。行触发器和语句触发器的区别表现在:
行触发器要求当一个DML 语句操作影响数据库中的多行数据时,对于其中的每个数据行,
只要它们符合触发约束条件,均激活一次触发器;而语句触发器将整个语句操作作为触发事
件,当它符合约束条件时,激活一次触发器。当省略FOR EACH ROW 选项时,BEFORE
和AFTER 触发器为语句触发器,而INSTEAD OF 触发器则为行触发器。
REFERENCING 子句说明相关名称,在行触发器的PL/SQL 块和WHEN 子句中可以
使用相关名称参照当前的新、旧列值,默认的相关名称分别为 OLD 和 NEW 。触发器的
PL/SQL 块中应用相关名称时,必须在它们之前加冒号(:),但在WHEN 子句中则
文档评论(0)