掌握 Oracle 触发器的种类及其用途(oracle触发器类型)

Oracle数据库中的触发器是一种对数据库中插入,更新或删除操作进行监控的特殊类型的存储过程,它会自动地在定义它的表或视图(触发者)上发生特定行为时触发。Oracle支持5种类型的触发器:在操作发生后( After 触发器),在操作发生前( Before 触发器),在操作发生前或后( Instead of),级联触发器(对于用户定义的类型),和Row level Trigger。

1、After触发器

After触发器在一个数据库事务完成之后被触发,它有助于跟踪表的状态变化并自动地执行一些特定的任务,它能够同时应用于多行。

Syntax:

CREATE [OR REPLACE] TRIGGER trigger_name

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

ON table_name

FOR EACH ROW

[DECLARE

— declarations for variables used

BEGIN

— trigger body

END;]

2、Before 型触发器

Before触发器是在插入,更新或删除操作发生前被触发的。它能够让我们在操作发生前修改操作的数据,甚至可以阻止该操作的发生,只有当指定的条件成立时,操作才能完成。闭包才能同时应用于多行。

Syntax:

CREATE [OR REPLACE]TRIGGER trigger_name

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

ON table_name

FOR EACH ROW

[DECLARE

— declarations for variables used

BEGIN

— trigger body

END;]

3、Instead of型触发器

Instead of触发器是在一个基于视图的操作发生前或者发生后发生的触发器。它允许用户通过修改一个视图来修改它关联的表,而不必在每个表上建立一个触发器。

Syntax:

CREATE [OR REPLACE]TRIGGER trigger_name

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

ON view_name

FOR EACH ROW

[DECLARE

— declarations for variables used

BEGIN

— trigger body

END;]

4、级联型触发器

级联型触发器可以用于在一个主表上触发一组语句,这组语句可以处理多个表,包括主表自身。级联型触发器是Oracle数据库新增的特性,使用了在语句执行过程中一个多表事务的方法。

Syntax:

CREATE [OR REPLACE] TRIGGER trigger_name

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

ON table_name

REFERENCING [old or new] AS reference_old_new

FOR EACH ROW

[DECLARE

— declarations for variables used

BEGIN

— trigger body

END;]

5、Row Level Trigger

Row level Trigger也称行级触发器,它是一种特殊的触发器,在循环块中每一行记录发生插入,更新或删除时被触发,因此同一组语句可以多次执行,每次一行记录发生操作时都会被执行一次,但是它只可以应用于单行,而不可以用于多行。

Syntax:

CREATE [OR REPLACE] TRIGGER trigger_name

FOR EACH ROW

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

ON table_name

[DECLARE

— declarations for variables used

BEGIN

— trigger body

END;]

总而言之,Oracle强大的触发器功能使我们有能力无限拓展所需要的功能,通过它我们可以让表满足复杂的业务要求,并自动跟踪数据,使系统更稳定、可靠。


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