您的位置:首页 > 其它

触发器相关概念与应用

2008-03-20 12:03 197 查看
触发器是被隐含执行的存储过程,它可以使用PLSQL,java和c进行开发,它由触发事件、触发条件和触发操作三部分组成。
*触发事件:从8i开始,oracle的触发事件扩充为:启动和关闭例程;oracle错误消息;用户登录和断开会话;特定表和视图的DML操作;在任何方案上的DDL语句。
*触发条件(可选):when指定的一个boolean表达式,决定是否执行触发代码。
*触发代码:触发代码不能超过32K,如果确实需要大量代码,可以先编写存储过程,然后在触发器中用call调用。
*触发时机:使用before/after指定触发器的触发时间。
*触发类型:使用for each row指定当触发事件发生之后,需要执行几次触发操作,默认为“语句触发”这时只会执行一次触发器代码;使用for each row指定为“行触发”这时在每个作用行上执行一次代码。
*触发顺序:当针对某一表的相同DML操作而建立了多个DML触发器(before/after语句触发器、before/after行触发器)时,触发器的执行顺序为:Before语句触发器->before第一作用行触发器->after第一作用行触发器…->before最后作用行触发器->after最后作用行触发器->after语句作用行触发器。
*条件谓词:当在触发器中同时包括多个触发事件时,为了在触发器中区分具体的触发事件,可以使用谓词inserting,updating和deleting。
*referencing子句:referencing OLD as old|NEW as new.
*控制数据安全:在服务器级控制数据安全是通过授予和收回权限来完成的grant select,indert,update,delete on emp to smith。当用户有了对象权限后,就可以随时在emp表上执行对应的sql操作,为了实现更复杂的安全模型,就需要使用dml触发器了。下面代码限制用户在时间段(9:00-17:00)内改变tsalary表数据。
createorreplacetrigger trig_tsalary_time
beforeinsertorupdateordeleteon tsalary
begin
if to_char(sysdate,'HH24') notbetween'13'and'17'then
raise_application_error(-20101,'非工作时间');
end;
*实现数据统计:审计可以用于监视非法和可疑的数据库活动。Audit insert ,update,delete on emp by access;设置上述语句后,如果emp表上执行dml操作,oracle会将关于sql操作的信息(用户,时间)写入数据字典(sys.aud$)中,但不会记载数据变化。为了审计sql操作所引起的数据变化,必须要使用dml触发器。
*实现数据完整性:check约束可以实现简单的数据完整性,而更复杂的特定商业规则则需要使用触发器来实现。
*实现参照完整性:参照完整性是指具有主从关系的两个表在删除和更新时保持数据一致,oracle在定义外键时提供的on delete cascade关键字可以实现级联删除的参照完整性,而更新操作的参照完整性则需要使用触发器来实现。
*显示触发器:数据字典user_triggers中保存了触发器的所有信息。
*禁止与激活触发器:alter trigger trig_name disable/enable;
*禁止或激活表上的所有触发器:alter table emp disable/enable all triggers;
*重新编译触发器:alter trigger tr_name compile;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: