翻译:陈拓 chentuo@ms.xab.ac
2006 年 6 月16 日
更多触发器概念
Copyright © Oracle Corporation, 2001. All rights reserved.
进度表: 时间 主题
80 分钟 讲演
40 分钟 练习
120 分钟 总共
目标
完成本课程后, 您应当能够:
• 创建附加的数据库触发器
• 解释触发器管理规则
• 实现触发器
10­2 Copyright © Oracle Corporation, 2001. All rights reserved.
本课目标
在本课中,你将学习怎样创建更多地数据库触发器并学习规则触发器。
你还将学习许多应用程序触发器。
创建数据库触发器
• 触发用户事件:
– CREATE, ALTER 或 DROP
– Logging on 或 off
• 触发数据库或系统事件:
– Shutting down 或 starting up 数据库
– 一个指定的错误 (或任何错误) 出现
10­3 Copyright © Oracle Corporation, 2001. All rights reserved.
创建数据库触发器
在编码触发器体之前,确定触发器的组建。
在系统事件上的触发器可以被定义在数据库或方案级别。例如,一个数据库 shutdown 触发器 被定义在数据库级别。在数据定义语言 (DDL) 语句上的触发器,或一个用户登录登出,即可以被 定义为数据库级别也可以被定义为方案级别。
在 DML 语句上的触发器被定义在指定的表或一个视图上。
一个定义在数据库级别的触发器对所有用户触发, 一个定义在方案或表级别的触发器只有当触 发级别包括该方案或表时才触发。
触发事件可能引起触发器触发:
·
在数据库或方案中的一个对象上一个数据定义语句
· 一个指定的用户 (或任何用户) 登录或登出
· 一个数据库关闭或启动
· 一个指定的或任何错误出现
在 DDL 语句上创建触发器
• 语法:
plsql配置oracle主目录CREATE [OR REPLACE] TRIGGER trigger_name
timing
[ddl_event1 [OR ddl_event2 OR ...]]
ON {DATABASE|SCHEMA}
trigger_body
10­4 Copyright © Oracle Corporation, 2001. All rights reserved.
创建触发器语法
DDL 事件 可能的值
CREATE无论何时一个 CREATE 语句添加一个新的数据库对象到数据字典中时,
引起 Oracle 服务器激发触发器
ALTER无论何时一个 ALTER 语句修改一个在数据字典中的数据库对象时,引
起 Oracle 服务器激发触发器
DROP无论何时一个 DROP 语句删除一个在数据字典中的数据库对象时,引起
Oracle 服务器激发触发器
触发器体代表一个完整的 PL/SQL 块。
你可以为在 DA TABASE 或 SCHEMA 上的那些事件创建触发器。你也可以为触发器的时机指定 BEFORE 或 AFTER。
如果创建的对象是簇、函数、索引、包、过程、角、序列、同义词、表、表空间、触发器、类型、 视图或用户,DDL 触发器触发。
10­5 Copyright © Oracle Corporation, 2001. All rights reserved.
在系统事件上创建触发器
CREATE [OR REPLACE] TRIGGER trigger_name
timing
[database_event1 [OR database_event2 OR ...]]
ON {DATABASE|SCHEMA}
trigger_body  创建触发器语法
数据库事件 可能的值
AFTER SERVERERROR  无论何时一个服务器错误信息被记入日志时,引起 Oracle 服务器激
发触发器
AFTER LOGON  无论何时一个用户登录到数据库时,引起 Oracle 服务器激发触发器
BEFORE LOGOFF  无论何时一个用户登出数据库时,引起 Oracle 服务器激发触发器
AFTER STARTUP  无论何时数据库被打开时,引起 Oracle 服务器激发触发器
BEFORE
SHUTDOWN
无论何时数据库被关闭时,引起 Oracle 服务器激发触发器 除了 SHUTDOWN 和 STARTUP ,你可以为在 DA TABASE 或 SCHEMA 上的这些事件创建触发 器,这些触发器只用于数据库。