探索 Oracle 触发器不同种类的功能(oracle触发器类型)

Oracle触发器(Trigger)是DataBase中一种特殊的程序单元,它是在满足一定条件时自动运行的。 Oracle 触发器有不同的种类,每种触发器的功能都不尽相同。本文将探索 Oracle 触发器不同种类的功能。

第一种 Oracle 触发器是表类触发器(Table-level Triggers),其可以监视更新操作,当数据表的记录发生增删改查等操作时就可以触发表类触发器进行数据校验,进行某些特殊的处理操作。下面的代码是一个典型的表类触发器,当SaleOrder表中订单状态从未支付变为已支付时,触发器会将相关订单信息插入日志表中:

CREATE TRIGGER SaleOrder_before_update

BEFORE UPDATE ON SaleOrder

FOR EACH ROW

BEGIN

IF (:OLD.OrderStatus != :NEW.OrderStatus)

AND (:NEW.OrderStatus =’yizhifu’) THEN

INSERT INTO SaleOrderLog VALUES

(:OLD.OrderID, OrderNum, :OLD.OrderStatus, :NEW.OrderStatus);

END IF;

END;

第二种 Oracle 触发器是行类触发器(Row-level Triggers),它能检测表中哪一行发生变化,对被修改的那一行记录进行更新,下面的代码是一个典型的行类触发器,当User表中VIP属性变为‘Yes’时,触发器会将相关用户添加到VIP表中:

CREATE TRIGGER User_before_update

BEFORE UPDATE ON User

FOR EACH ROW

BEGIN

IF :NEW.VIP = ‘Yes’ THEN

INSERT INTO VIP VALUES (:NEW.UserID, :NEW.UserName);

END IF;

END;

第三种 Oracle 触发器是联动触发器(Constraint Trigger),它在对于数据完整性的保护方面有着重要的作用,例如下面的代码,当表Customer中有数据被删除时,联动触发器会对对应的日志表进行更新:

CREATE TRIGGER Customer_after_delete

AFTER DELETE ON Customer

FOR EACH ROW

BEGIN

INSERT INTO CustomerLog

VALUES (:OLD.CustomerID, :OLD.CustomerName, ‘Delete’);

END;

以上就是 Oracle 触发器不同种类的功能,Oracle触发器帮助我们实现了自动化任务,可以让我们更省心和放心,节省大量人力和财力。


数据运维技术 » 探索 Oracle 触发器不同种类的功能(oracle触发器类型)