掌握 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强大的触发器功能使我们有能力无限拓展所需要的功能,通过它我们可以让表满足复杂的业务要求,并自动跟踪数据,使系统更稳定、可靠。