进度表:时间主题
80 分钟讲演
40 分钟练习 120
分钟总共
9-2Copyright ©Oracle Corporation, 2001. All rights reserved.
目标
完成本课程后, 您应当能够:
•
描述不同触发器类型的区别•
描述数据库触发器和它们的用途•
创建数据库触发器•
描述数据库触发器的点火(firing ) 规则•删除触发器
本课目标
在本课中,你将学习怎样创建和使用数据库触发器。
9-3Copyright ©Oracle Corporation, 2001. All rights reserved.
触发器的类型
触发器:
•
是一个PL/SQL 块或是与表、视图方案或数据库关联的PL/SQL 过程•
当特定的事件发生时隐式执行•触发器可以是:
–
应用程序触发器:当一个特定应用程序的事件发生时触发–数据库触发器:当数据事件(例如DML) 在一个方案上发
生或系统事件(例如登录或关闭数据库) 在数据库上发生
时触发
触发器的类型
在一个应用程序中,当一个特殊的数据操纵语言 (DML) 事件发生时,应用程序触发器隐式地执行。一个广泛使用触发器的应用程序的例子是用 Oracle Forms Developer 开发的应用程序。
当一个表上的象 DML 这样的数据事件 (INSERT 、UPDATE 或 DELETE 触发语句),或在一个视图上的 INSTEAD OF 触发器,或象 CREATE 和 ALTER 这样的数据定义语言 (DDL) 语句被发布时,数据库触发器隐式地执行,不论哪一个用户被连接或哪一个应用程序被使用。当一些用户行为或数据库系统行为发生时,例如,当用户登录时,或 DBA 关闭 (shutdown) 数据库时,数据库触发器也会隐式地执行。
sql触发器的使用
注:数据库触发器可以被定义在表或视图上。如果一个 DML 操作在一个不可更新的视图上被发布,INSTEAD OF 触发器定义那些会发生的行为。如果这些行为包含对表的 DML 操作,那么基于该表的任何触发器都被触发。
数据库触发器可以是在数据库或方案上的系统触发器。如果是数据库,触发器对所有用户的每个事件触发;如果是方案,触发器对指定用户的每个事件触发。
本章讲述创建数据库触发器。创建基于系统事件的数据库触发器在 “更多触发器概念” 一章中讨论。
9-4Copyright ©Oracle Corporation, 2001. All rights reserved.
设计触发器的原则
•设计触发器为了:
–
执行相关的动作–集中全局操作
•下面的情况不用触发器:–已经内建于Oracle 服务器中的功能
–
重复其它的触发器•
创建存储过程并且在触发器中调用它们,如果PL/SQL 代码非常长。•过分地使用触发器可能导致复杂的依赖,这在大的应用
程序中可能会产生维护困难。
设计触发器的原则
用触发器保证当一个指定的操作被执行时,相关的动作被执行。
数据库触发器只用于那些对触发语句应该被触发的集中的全局的操作,而不管那个
用户或那个应用程序发布了该语句。
不要对重复的或替代已经内建预 Oracle 数据库中的功能定义触发器。例如不要定
义用于实现那些用声明约束可以就可以做到的完整性规则触发器。下面是商业规则设计顺序:
– 使用在 Oracle 数据库中内建的约束,例如,主见、外键等等
– 开发数据库触发器或在中间层开发象 servlet 或 EJB 这样的应用程序
– 如果不能开发上面提到的商业规则,则应开发表示层规则,使用象 Oracle Forms 、动态 HTML 、JSP 等这样的表示层接口
过多使用触发器可能会导致复杂的依赖关系,这可能会造成维护大型应用程序的困
难。只在必要时使用触发器,并且避免递归和级联效应。
如果触发器的算法很长,将算法创建于存储过程中,再在触发器中调用它们。 注意数据库触发器对于每个用户每次触发器被创建的事件发生时触发。
数据库触发器的例子
在这个例子中,数据库触发器 CHECK_SAL 在应用程序尝试插入一行到EMPLOYEES 表中时检查薪金值。按照工作岗位的不同薪金值如果超出了范围就会被拒绝,或者可能被允许但记录在审计表中。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论