Oracle 中各种触发器类型及其应用(oracle触发器类型)

Oracle 中具有多种触发器类型,每一种触发器类型都具有其特定的用途及作用。本文分别就Oracle中的Row Level Trigger、statement Level Trigger、System Level Trigger 及Mutating Table三种触发器概要介绍其作用及应用。

Row Level Trigger是表行级触发器,也称为行触发器,是最常用的触发器之一。当表行中的一列或多列值改变时,此触发器会自动激活,执行一些指定的逻辑动作,其提供的功能如下,可以用来实现业务逻辑的检查及审核;表达式可以改变其他表的数据;它可以用来确保数据一致性;可以用来生成联合索引或和更新自增性列。

语句级触发器也称为语句触发器,它操作一条SQL语句,而不是某个表行,这种触发器通常用于跟踪表数据的更改,它在某种时机上激发,不断检查表数据是否有改变以及改变的程度。下面是一个语句级触发器的一个例子:

CREATE OR REPLACE TRIGGER T1

BEFORE UPDATE ON EMPLOYEE

FOR EACH ROW

BEGIN

IF :NEW.SAL > :OLD.SAL

THEN

INSERT INTO SAL_Audit VALUES (SYS_CONTEXT(‘user’,’username’), :NEW.SAL);

END IF;

END;

系统级触发器又被称为数据库事件触发器,通常它在数据库服务器端检测某些事件,当检测到某个事件时,就会触发相应的触发器。它包括登录触发器、登出触发器、登录失败触发器。登录触发器针对用户登录,可以查看哪些用户登录了服务器;而登出触发器是当用户登出时,可以跟踪这个动作,登录失败触发器则可以看到限制用户数量或者收集登录失败信息。例如:

CREATE OR REPLACE TRIGGER login_hist_t

AFTER LOGON ON DATABASE

BEGIN

INSERT INTO Login_history

VALUES (SYS_CONTEXT(‘user’,’username’),

SYS_CONTEXT(‘user’,’machine’),

SYS_CONTEXT(‘user’,’host’),

SYSDATE);

END;

而mutating table 触发器是绝大多数触发器Internal错误的主要原因,它一般由于它一般会访问到正在被触发器操作的表中的数据,而造成 mutating table errors ,从而使数据不可用。这种触发器常见于多个相互调用的表行触发器,由循环调用不断执行同一个操作而导致mutating table errors。例如:

CREATE OR REPLACE

TRIGGER t_A

AFTER INSERT OR UPDATE ON TableA

FOR EACH ROW

BEGIN

UPDATE TableB SET fieldB=fieldB+1

WHERE row.fieldA = :new.fieldA;

END;

因此,上述就是Oracle中各种触发器类型及其应用的介绍,各种触发器类型都可以用来实现表行及数据库不同程度的数据更新,但是应该根据特定的场景及业务需求下选择正确的触发器类型来实现设计的功能。


数据运维技术 » Oracle 中各种触发器类型及其应用(oracle触发器类型)