深入探索Oracle触发器类型及其应用(oracle触发器类型)
Oracle触发器是一种特殊类型的存储过程,它在某个特定事件发生时被自动调用,完成执行一组操作,如更新任何关联表,运行存储过程或发布某个外部消息。 触发器也可以在特定事件发生前或者发生后做出反应,并及时执行特定的动作。这些动作可以是可执行的SQL,存储过程内容,或发布一个外部事件,处理像是hotmail email发送/接收等事件的服务器计划任务。
Oracle触发器提供了一种超越传统的程序开发和管理范式,可以自动实现新增修改表记录时的完整动作和复杂管理。Oracle共有四种触发器类型:Row Level Triggers, Statement Level Triggers, Before Triggers和After Triggers.
Row Level Triggers在表中每一行发生Insert,Udate或Delete动作后即发生,它会调用某一触发器,来检查变化数据是否符合要求;
Statement Level Triggers仅检查或过滤一个语句中执行的表操作,只能检查最终执行的总结果而不能检查每一行的变化数据;
Before Triggers在一个INSERT,UPDATE,DELETE语句执行前被调用,一般用于对更新数据的约束和控制;
After Triggers在一个INSERT,UPDATE,DELETE语句执行后被调用,如检查表中关联数据更新情况。
例如,下面这个示例Creates一个Before Trigger用来实现对一个表中特定列的数据和时间进行约束:
CREATE OR REPLACE TRIGGER trg_restriction
BEFORE INSERT ON exam FOR EACH ROW
BEGIN IF(:new.exam_date
raise_application_error(-20001,'Exam date can't earlier then today!'); END IF;
END;
从上面的例子中可以看出,使用触发器可以方便的实现数据过滤、权限控制等功能。所以触发器在务实的程序开发Lifecycle中是不可缺少的一部分,它可以有效地在单一数据库端进行复杂的程序开发。