Oracle数据库触发器类型简介(oracle触发器类型)

Oracle数据库触发器是一种可以执行自定义动作的特殊对象,当特定的数据库修改操作发生时自动触发执行,而且无法预知何时触发。Oracle触发器可以构成基于事件的模型,精确控制数据库应用程序中何时、何种行为发生,使得应用程序能够实现灵活的服务对象与数据源之间的分离。目前Oracle架构支持三种类型的触发器,分别是Before Trigger、After Trigger 和 Row Level Trigger。

Before Trigger运行之前必须进行一个检查,来确保触发器的操作会在数据变更成功后完成。其内置的“IF NOT EXISTS”语句将确保触发器只会执行一次,如果多次触发,则只有第一次会执行。Before Trigger用于对表进行查询并影响修改操作的结果,以保护业务逻辑的一致性。下面是一个使用Triggers实现的Before Trigger的例子:

CREATE OR REPLACE TRIGGER trg_before_emp_update
BEFORE UPDATE OF salary on employee
FOR EACH ROW
BEGIN
IF :new.salary > 10000 THEN
:new.salary := 10000;
END IF;
END;

After Trigger也需要在数据库事务完成之后才能执行,但是触发器可以在任何异常发生后都可以运行,甚至是事务回滚。用于在数据变更操作之后更新其他关联的表或插入新的数据,同样可以实现业务逻辑的一致性,下面是一个使用Triggers实现的After Trigger的例子:

CREATE OR REPLACE TRIGGER trg_after_emp_update
AFTER UPDATE of emp_name on employee
FOR EACH ROW
BEGIN
INSERT INTO emp_activity VALUES (:old.emp_name, :new.emp_name, sysdate);
END;

Row Level Trigger用于影响每一行数据变更,记录触发前和触发后的列,以及改变行为。可以用来实现修改列值前日志记录,或者保护业务逻辑的一致性,例如:

CREATE OR REPLACE TRIGGER trg_row_level_emp_update
BEFORE UPDATE on employee
FOR EACH ROW
BEGIN
IF :old.department_id != :new.department_id THEN
INSERT INTO emp_activity VALUES (:old.emp_name, :new.department_id);
END IF;
END;

总的来说,Oracle提供了三种不同类型的数据库触发器实现,用户可以根据实际需求选择对应的触发器,从而满足业务应用的各种需求。


数据运维技术 » Oracle数据库触发器类型简介(oracle触发器类型)