灵活运用Oracle触发器类型的技巧(oracle触发器类型)
Oracle 触发器定义可以指定在一个数据库表或者视图上面发生的某些操作时,执行的指定动作.触发器能够检查数据库表或者视图的内容是否变更,在数据表或者视图的内容发生变更的时候, 按照定义的操作执行一些特殊的动作,用于控制数据库表或者视图的变更,保护数据库表或者视图的完整性和一致性. Oracle提供了三种类型触发器,BEFORE 触发器,AFTER 触发器 和 INSTEAD OF 触发器.
BEFORE 触发器是在一项操作提交之前触发的.它必须在一个事务内完成,在操作(INSERT, UPDATE 或者 DELETE)完成前要求事务满足某些条件.BEFORE 触发器可以对操作中的新值或旧值作出检查,为了修改操作的结果,BEFORE 触发器可以改变新的值或者在前次触发的条件不满足的情况下终止操作.
AFTER 触发器是在操作完成之后触发的.AFTER 触发器有多项好处,它极大地简化了大量列程序的编程,因此在此舆此许多复杂和重要的数据更新由一个函数来实现.AFTER 触发器只能对操作中产生的新值检查,不能对旧值作出检查.
INSTEAD OF 触发器是一种在应用程序操作发生前被调用的触发器类型. INSTEAD OF 触发器极大地改进了数据库管理和功能,它能够使得复杂的,多表的SQL语句得到完整的支持,这一类触发器有助于限定,记录和优化数据库访问操作.INSTEAD OF 触发器不像AFTER触发器一样,AFTER 触发器只能执行操作完成后的操作,INSTEAD OF 触发器可以在操作之前或者操作之后做出变更.
举例,例如我们想删除启动字段值与字符‘ABC‘匹配的行,同时也希望更新‘STARTUP_DATE’字段的值, 我们可以使用INSTEAD OF 触发器来完成这一功能:
CREATE OR REPLACE TRIGGER del_startup_fld
INSTEAD OF DELETE ON t_del
BEGIN
UPDATE t_del
SET startup_date = SYSDATE
WHERE startup_fld = ‘ABC‘;
DELETE FROM t_del
WHERE startup_fld = ‘ABC‘;
COMMIT;
END;
从上面这个例子可以看到,INSTEAD OF 触发器可以在操作发生前修改,改变或者取消操作,它提供了Oracle系统更为灵活的方式实现数据库性能调优和很多复杂应用.
从上可以看出,Oracle 触发器类型技巧的多种运用,在数据库应用中具有很重要的地位.熟练运用这些技巧能够提高系统的效率,不仅能够保护数据库的完整性和一致性,而且能够减少开发程序的成本. 因此,Oracle数据库开发人员应该深入学习和熟练掌握Oracle触发器类型技巧,从而更加灵活地应用Oracle 的特性.