掌握Oracle触发器的五种类型(oracle触发器类型)

Oracle触发器是由PL/SQL表达式或特定事件自动执行的库程序单元,依赖触发器的语句来联动实施某一特定的动作。它可以检测对某个表的INSERT、DELETE 或 UPDATE 操作,然后之前或之后基于这些操作来执行一系列定义好的动作。简而言之,Oracle 触发器就是一个在特定事件触发后执行特定代码块的存储过程。

在Oracle数据库中,总共有5种不同类型的触发器。他们是:

(1)行级触发器(Row Level Trigger):它最常见的应用是当数据表中某一行发生改变时,行级别的触发器将会被激发,并执行指定的代码,用以对表中变更进行管理。

例如:当表中任意列值变化时,包括在插入数据、更新数据或删除数据时,将触发触发器,从而执行触发器包含的PL/SQL代码块,例如:

CREATE OR REPLACE TRIGGER my_trg

AFTER INSERT OR UPDATE OR DELETE

ON employees for each row

BEGIN

IF updating THEN

–UPDATE STATEMENTS

ELSIF inserting THEN

–INSERT STATEMENTS

ELSIF deleting THEN

–DELETE STATEMENTS

END IF;

END;

/

(2)语句级触发器(Statement Level Trigger):与行级触发器不同的是,这种类型的触发器会在整个SQL语句执行完成后才被激发,也就是用户发出了一个SQL语句后,更改了多少行记录,语句级触发器都会被激发。

例如:假设有一个employees数据表,在表中执行DELETE或UPDATE语句,将触发下面的语句级触发器:

CREATE OR REPLACE TRIGGER my_trg

AFTER DELETE OR UPDATE

ON employees

BEGIN

If Inserting then

–INSERT STATEMENTS

ELSIF Deleting then

–DELETE STATEMENTS

ELSIF Updating then

–UPDATE STATEMENTS

END IF;

END;

/

(3)事件触发器(Event Trigger):它是Oracle Database 10g中引入的新特性,可以根据特定的表或用户定义的事件来触发触发器。例如,可以在一个固定时间点,或者在表上发生更新之后,触发一个事件,从而执行定义的动作。

例如:发生更新表employees之后,将触发下面的事件触发器:

CREATE OR REPLACE TRIGGER my_trg

AFTER UPDATING ON employees

BEGIN

–STATEMENTS

END;

/

(4)系统触发器(System Trigger):它是一种特殊的触发器,它可以根据系统定义的或用户定义的事件对数据库操作进行监控和管理,这些事件可以是起点事件,也可以是某个 session的非起点事件。

例如:当起点事件”AFTER LOGON ON” 发生在 DATA 库上时,将触发以下系统触发器:

CREATE OR REPLACE TRIGGER check_for_data

AFTER LOGON ON data

BEGIN

–STATEMENTS

END;

/

(5)复合触发器(Compound Trigger):它有点像一个事件触发器,但是它可以定义4种不同的触发器分支,分别是:BEFORE 对象变化、AFTER 对象变化等。可以将不同类型的触发器(行级,语句级或者系统触发器)组合起来,以定义一种强大的复合触发器。

例如,通过以下语句可以创建一个复合触发器:

CREATE OR REPLACE TRIGGER my_trg

FOR INSERT OR UPDATE OR DELETE ON employees

COMPOUND TRIGGER

–BEFORE STATEMENT TRIGGER

BEFORE STATEMENT IS

BEGIN

–STATEMENTS

END BEFORE STATEMENT;

–BEFORE EACH ROW TRIGGER

BEFORE EACH ROW IS

BEGIN

–STATEMENTS

END BEFORE EACH ROW;

–AFTER EACH ROW TRIGGER

AFTER EACH ROW IS

BEGIN

–STATEMENTS

END AFTER EACH ROW;

–AFTER


数据运维技术 » 掌握Oracle触发器的五种类型(oracle触发器类型)