深入浅出Oracle触发器类型介绍(oracle触发器类型)

Oracle触发器通常用来在Oracle数据库中完成一些自动化steps,从而节省大量时间以及更加高效的对数据或表进行操作。与存储过程相比,Oracle触发器更加轻量级,并且可以定义一个或多个表受它们影响,它们会在表结构改变时立即发挥作用,而不用重新开始存储过程,也不用在流程中设置特定变量。

Oracle触发器可以分为三类:

1. Row Level触发器

Row-level触发器会响应行级别的改变,也就是对于每行的改动都会响应。这类触发器的定义有两种情况:BEFORE和AFTER,其中BEFORE表示在每一行插入或更新之前响应;AFTER表示在每一行插入或更新之后响应。例如:

CREATE OR REPLACE TRIGGER tr_stu_ab BEFORE

INSERT OR UPDATE OF age ON student

FOR EACH ROW

BEGIN

IF :NEW.age

RAISERROR ‘age should not be less than 0’;

ELSE

:NEW.age := round(:NEW.age);

END IF;

END;

2. Statement Level触发器

Statement Level触发器响应的是表结构的改变,而不是行的改变,它仅仅在数据的变化发生的时候才被触发,而不论多少行受到这些变化的影响。只要数据库语句改变了表结构,就会被触发。它们的定义也有两种情况,BEFORE和AFTER,其中BEFORE表示在操作发生之前响应;AFTER则表示在操作发生之后受到响应。例如:

CREATE OR REPLACE TRIGGER tr_emp_after AFTER

DELETE ON employee

BEGIN

INSERT INTO audit_table VALUES (‘Employee deleted’,SYSDATE);

END;

3. System Level触发器

System-level触发器顾名思义是针对整个系统的,这类触发器会响应可能对系统产生影响的改变,如系统时间的变更,或者用户的login/logoff。它们的定义仅有一种情况,只能在AFTER之后响应,如:

CREATE OR REPLACE TRIGGER tr_login AFTER

LOGON ON DATABASE

BEGIN

INSERT INTO record VALUES (‘sys_opr_login’,USER,SYSDATE);

END;

由于不同触发器的使用情形不尽相同,因此我们要根据我们的应用实际情况,选用最合适的触发器,才能更好应用Oracle触发器,从而最大化它们的效率。


数据运维技术 » 深入浅出Oracle触发器类型介绍(oracle触发器类型)