Oracle触发器:熟悉它们的不同类型(oracle触发器类型)
Oracle触发器是一种在用户定义的时间点上执行特定操作的一种数据库对象,它会针对表或表组上特定的操作产生不同类型的反应。如果表中的某个操作满足定义的条件,则会触发器就会发出消息进行通知。Oracle触发器可以按照不同的行为来分类,下面将介绍其中的几种常见的类型。
1. 表级触发器:表级触发器是在基于表上操作时触发的,比如插入、更新和删除,用来控制表的属性或保证表的完整性,可以保证表的操作是受控的。例如下面的示例显示了如何在表上创建一个触发器,当表上的某个字段值发生了变化时,就会执行相应的操作:
CREATE OR REPLACE TRIGGER ON_UPDATE_AMOUNT
BEFORE UPDATE OF AMOUNT
ON CUSTOMER FOR EACH ROW
DECLARE
— 变量声明
OLDAMOUNT INT DYANAMIC_COLUMN;
NEWAMOUNT INT DYANAMIC_COLUMN;
BEGIN
SELECT :OLD.AMOUNT, :NEW.AMOUNT
INTO OLDAMOUNT, NEWAMOUNT
FROM CUSTOMER;
— 更新操作
IF NEWAMOUNT != OLDAMOUNT THEN
INSERT INTO CUSTOMER_HISTORY(AMOUNT)
VALUES (OLDAMOUNT);
END IF;
END;
/
2. 行级触发器:行级触发器是在每行被操作时触发的,用来处理每行数据,它可以控制某一特定行的属性,常用来处理某行数据校验失败的异常情况,下面是一个示例来解释行级触发器:
CREATE OR REPLACE TRIGGER ON_UPDATE_AMOUNT
BEFORE UPDATE OF AMOUNT
ON CUSTOMER
FOR EACH ROW
DECLARE
— 变量声明
P_AMOUNT INT DYANAMIC_COLUMN;
BEGIN
SELECT :NEW.AMOUNT
INTO P_AMOUNT
FROM CUSTOMER;
— 校验操作
IF P_AMOUNT
RAISE_APLICATION_ERROR(‘账户余额不能为负’);
END IF;
END;
/
3. 表组触发器:表组触发器是在一组指定的表上进行操作的触发器,也就是同时操作多张表,它比一般的表级触发器操作更为灵活多变,下面是在多张表上执行更新操作的一个示例:
CREATE OR REPLACE TRIGGER ON_UPDATE_AMOUNT
BEFORE UPDATE OF AMOUNT
ON CUSTOMER, ORDER
FOR EACH ROW
DECLARE
— 变量声明
P_CUSTAMOUNT INT DYANAMIC_COLUMN;
P_ORDERAMOUNT INT DYANAMIC_COLUMN;
BEGIN
SELECT :NEW.AMOUNT
INTO P_CUSTAMOUNT
FROM CUSTOMER;
SELECT :NEW.AMOUNT
INTO P_ORDERAMOUNT
FROM ORDER;
— 更新操作
IF P_ORDERAMOUNT > P_CUSTAMOUNT THEN
RAISE_APLICATION_ERROR(‘账户余额小于订单金额’);
END IF;
END;
/
总结
Oracle触发器是一种数据库对象,可以在用户定义的时间点上执行特定的操作,其中有表级触发器、行级触发器和表组触发器。触发器是一种非常有用的数据库功能,可以用来保证表和表之间的完整性,并且可以处理一些特殊业务逻辑。