精通 Oracle 的触发器类型及使用方法(oracle触发器类型)

Oracle是甲骨文公司开发的一种面向对象的关系型数据库管理系统,采用的是事务处理层的并发控制,而触发器(trigger)是它其中的一个重要组成部分。在Oracle数据库中,触发器首先得到它设定的那个表或是视图的字段数据变化,然后根据设定的条件来运行一个特定的程序,执行任务,还可以得到由各种 SQL 语句、函数、存储过程等组成的操作集合,我们称之为触发器定义(trigger body),通过它来完成Oracle数据库自动管理及逻辑数据控制,使系统拥有更多智能的功能。

Oracle中的触发器(trigger) 分为三类:

1、BEFORE: 其在操作发生之前被触发;

2、AFTER:其在操作发生之后被触发;

3、INSTEAD OF: 其在操作发生时被触发(即替换),由于其优先级较高,所以在INSTEAD OF触发器定义的表达式被成功执行后,操作将不会再发生。

BEFORE触发器是在操作发生之前被触发的一种触发器,它是此类触发器的“原型”,它的作用范围是在“insert”,“update”,“delete”操作发生前被触发。在下面的SQL语句中,首先将“username”的值赋予变量“@username”,然后将变量的值赋给表的字段“user_name”:

“`sql

CREATE OR REPLACE TRIGGER before_trigger

BEFORE INSERT OR UPDATE ON tb_user

FOR EACH ROW

BEGIN

@username := :new.user_name;

:new.user_name := @username;

END;


AFTER触发器是在操作发生之后被触发的一种触发器,它主要用来处理诸如记录操作时间、日志等其他应用场景,它的作用范围是在“insert”,“update”,“delete”操作发生后被触发,下面这个触发器就在操作发生之后记录勾操作时间:
```sql
CREATE OR REPLACE TRIGGER after_trigger
AFTER INSERT ON tb_user
FOR EACH ROW
BEGIN
INSERT INTO tb_log(user_name,time) VALUES(:new.user_name,sysdate);
END;

最后要说的是INSTEAD OF触发器,它在操作发生时被触发,并且它的优先级较高,所以在执行触发器定义的表达式后,操作不会发生,它的作用范围是用在受到约束的“view”的情况,其触发方法通常是:

“`sql

CREATE OR REPLACE TRIGGER view_trigger

INSTEAD OF INSERT OR UPDATE OR DELETE ON v_cn

BEGIN

IF UPDATING THEN

ELSE IF DELETING THEN

ELSE

END;


综上所述,精通Oracle的触发器类型及使用方法非常有必要,触发器可以很好的帮助任务自动执行、逻辑控制和覆盖操作等,在日常的数据库管理工作中,学会运用和熟练使用Oracle触发器,可以非常大的提高工作效率。

数据运维技术 » 精通 Oracle 的触发器类型及使用方法(oracle触发器类型)