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

场景

Oracle数据库中有两种触发器,即表触发器和存储过程触发器。前者的触发动作是基于表或表及表列的DML操作触发,后者的触发动作是基于存储过程执行结果或SQL语句返回值触发。

首先,我们来看一下Oracle数据库中表触发器的类型。表触发器有三种类型:BEFORE触发器、AFTER触发器和INSTEAD OF触发器 。

BEFORE触发器仅当实行DML操作前触发一次,支持的DML操作包括:INSERT、UPDATE和DELETE类型。 我们可以通过下面的代码来创建BEFORE触发器:

CREATE OR REPLACE TRIGGER BEF_TRIGGER
BEFORE INSERT OR UPDATE OR DELETE
ON Table1
FOR EACH ROW
BEGIN
--Statements;
END;

AFTER触发器仅当执行DML操作后触发一次,支持的DML操作也包括:INSERT、UPDATE和DELETE类型。 我们可以通过下面的代码来创建AFTER触发器:

CREATE OR REPLACE TRIGGER AFT_TRIGGER
AFTER INSERT OR UPDATE OR DELETE
ON Table1
FOR EACH ROW
BEGIN
--Statements;
END;

INSTEAD OF触发器可以在触发指定的DML操作之前先拦截DML操作,然后由触发器来对该表进行操作更新。其中支持的表触发器包括视图触发器和复合条件视图触发器,可以通过下面的代码创建INSTEAD OF触发器:

CREATE OR REPLACE TRIGGER INS_TRIGGER
INSTEAD OF INSERT OR UPDATE OR DELETE
ON View1
FOR EACH ROW
BEGIN
--Statements;
END;

其次,我们来看存储过程触发器。 存储过程触发器是在数据库里创建一个存储过程,这个存储过程可以记录当前会话ID,执行结束时执行一个指定的SQL语句,可以根据需求而定。当该存储过程执行完成时,就可以触发一个指定的SQL语句,从而达到自动执行的目的。我们可以通过以下代码来创建存储过程触发器:

CREATE OR REPLACE TRIGGER SP_TRIGGER
AFTER UPDATE
ON Table1
FOR EACH ROW
BEGIN
EXECUTE PROC_Example;
END;

Oracle数据库中触发器的两种类型及应用场景:在表触发器中存在BEFORE触发器、AFTER触发器和INSTEAD OF触发器,用来基于表或表及表列的DML操作触发某些事件;在存储过程触发器中,用来基于存储过程执行结果或SQL语句返回值触发某些事件。在应用场景中,表触发器利用触发器可以自动执行一些数据库维护操作或者一些复杂的任务,而存储过程触发器可以用来记录会话的ID和管理数据库的访问,以及用于循环更新数据库中的一组数据。


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