Oracle数据库触发器类型及其应用(oracle触发器类型)

Oracle数据库中的触发器(Trigger)是一种特殊的存储过程,它用户自动处理数据库某些动作时可以指定要执行的操作。触发器是为了满足数据库系统中复杂的业务,当表中指定列发生某些改变,数据库系统自动进行处理的存储过程。

Oracle数据库的触发器分为四类,如下所示:

1. BEFORE触发器 (BEFORE Trigger)

BEFORE触发器在满足条件时,允许在数据库操作之前,在一个特定的表中执行一个动作,它可以在拒绝操作发生之前进行检查或者纠正。例如:在数据插入时确保特定的列中的数据格式是正确的。

2. AFTER触发器(AFTER Trigger)

AFTER触发器允许在一个特定表完成数据库操作之后执行一个或多个动作。它可以检查或者修改一些表,还可以用来限制表,比如禁止建立重复索引,或者在字段满足一定条件时,更新一个不能修改的列。

3. INSTEAD OF触发器(INSTEAD OF Trigger)

INSTEAD OF触发器在视图上应用の前发生,它允许应用程序在无法更新原有表的情况下更新视图,它支持对虚拟表的操作,包括INSERT、UPDATE、DELETE。 例如:如果一个视图持有多个表,而其中某些表不允许更新,INSTEAD OF触发器就变得很有用,可以补齐视图所需的更新函数。

4. COMPOUND触发器(COMPOUND Trigger)

COMPOUND触发器是Oracle 11g引入的新的触发器,它支持BEFORE和AFTER触发器的同时触发,COMPOUND触发器可以实现兼容性,并可以支持更多的复杂的触发器情况。

Oracle的触发器能够非常方便的解析复杂的业务,从而大大简化业务的处理,极大的提升了工作效率。用法很简单,基本格式如下:

CREATE [OR REPLACE] TRIGGER trigger_name

{BEFORE | AFTER | INSTEAD OF }

{INSERT [OR] | UPDATE [OR] | DELETE }

[OF col_name] –可选

ON table_name

[REFERENCING OLD AS o NEW AS n] –可选

[FOR EACH ROW] –可选

WHEN (condition)

BEGIN

— 操作语句

END;

实例:

CREATE OR REPLACE TRIGGER trig_deptno

BEFORE INSERT ON dept

FOR EACH ROW

BEGIN

IF :NEW.deptno IS NULL THEN

RAISE_APPLICATION_ERROR(-20001, ‘部门号不能为空!’);

END IF;

END;

CHANGE

ALTER TRIGGER trig_deptno

BEFORE INSERT ON dept

FOR EACH ROW

BEGIN

IF :NEW.deptno

RAISE_APPLICATION_ERROR(-20002, ‘部门号应该大于0!’);

END IF;

END;

Oracle 触发器在一些应用中可以大大地提高业务效率并解析各种业务场景,比如当特定字段信息发生改变时对相关联表做出回应,从而保障数据库中各表之间的一致性。


数据运维技术 » Oracle数据库触发器类型及其应用(oracle触发器类型)