深入理解Oracle的触发器类型(oracle触发器类型)

Oracle的触发器是一种特殊的存储程序,它能够在特定事件发生时自动调用,它不同于存储过程或视图,它不需要显式调用,而是响应用户对数据库的更改,用于执行特定操作。Oracle触发器的核心机制是响应用户在数据表上的更新,增加,删除等操作,当用户在数据表上执行这些操作时,触发器会被调用,执行用户定义的操作。

Oracle支持两种类型的触发器:联机触发器和在线触发器。联机触发器是在DML(Data Manipulation Language)事件发生时执行语句,而在线触发器是在DDL(Data Definition Language)操作发生时触发执行语句。

联机触发器(online trigger)

联机触发器称为BEFORE或AFTER触发器。

联机触发器在提交时被触发,只适用于DML语句(INSERT,UPDATE,DELETE),并且有BEFORE和AFTER子句。BEFORE触发器将在触发事件Q发生之前执行,而AFTER触发器将在该事件发生之后执行。

例如,创建一个用于更新“商品表”中商品单价的联机触发器,将单价更新为所有订单中商品中最高价格:

CREATE OR REPLACE TRIGGER upd_price

AFTER UPDATE

ON orders

FOR EACH ROW

BEGIN

UPDATE Goods

SET Price = (SELECT MAX(price)

FROM Orders

WHERE Goods.goods_id = :new.goods_id)

WHERE Goods.goods_id = :new.goods_id;

END;

在线触发器(offline trigger)

在线触发器是在用户对数据字典中的表做出定义性变更时触发的,只有当用户请求一个DDL操作时才会触发。它只能为CREATE,ALTER,DROP等操作触发,并且只有当所撰写的SQL语句在提交之前才会触发。

例如,可以创建一个记录所有对表上的结构修改的在线触发器:

CREATE OR REPLACE TRIGGER log_change

BEFORE ALTER ON Goods

FOR EACH ROW

BEGIN

INSERT INTO log_table (change_time, username, table_name, action)

VALUES (SYSDATE, USER, ‘Goods’, ‘ALTER’);

END;

总之,Oracle提供了两种类型的触发器,即联机触发器和在线触发器,它们的核心机制是监听用户数据表上的更新、增加、删除等操作,并作出相应反应。联机触发器在DML(Data Manipulation Language)操作发生时被调用,而在线触发器在DDL(Data Definition Language)操作发生时被调用,它们都可以实现灵活的数据库任务。


数据运维技术 » 深入理解Oracle的触发器类型(oracle触发器类型)