Oracle 触发器的类型及其应用(oracle触发器类型)

Oracle 触发器是指在某种条件被满足后,自动执行指定的一系列操作,它对应用开发者来说,是一种功能较丰富的特殊处理工具,利用它可以更简单、更快速、更准确地实现系统功能。主要有如下三种类型:

一、行级触发器(row-level triggers)

行级触发器是反映数据库行变化的,每次执行SQL语句时,由Oracle根据受到影响的表行数而发动多次指定的触发器。常用行级触发器:

1、before格式触发器:它在指定操作发生之前被触发。例如:

CREATE OR REPLACE TRIGGER tg_udp_time

BEFORE UPDATE ON test_table

FOR EACH ROW

BEGIN

UPDATE test_table

SET update_time = SYSDATE

WHERE id = :new.id;

END;

2、after格式触发器:它在指定操作发生之后被触发。例如:

CREATE OR REPLACE TRIGGER tg_udp_sys

AFTER UPDATE ON test_table

FOR EACH ROW

BEGIN

INSERT INTO test_log(name, update_time, content)

VALUES(:new.name, SYSDATE, ‘数据更新’);

END;

二、语句级触发器(statement-level triggers)

语句级触发器是反映数据库语句的,每次DML SQL语句执行时,由Oracle发动一次指定的触发器,没有行受影响也会发动触发器。常用语句级触发器:

1、before格式触发器:它在指定操作发生之前被触发。例如:

CREATE OR REPLACE TRIGGER tg_buffer

BEFORE INSERT OR UPDATE OR DELETE ON test_table

BEGIN

DELETE test_buffer WHERE TIMEOUT

END;

2、after格式触发器:它在指定操作发生之后被触发。例如:

CREATE OR REPLACE TRIGGER tg_log

AFTER INSERT OR UPDATE OR DELETE

ON test_table

BEGIN

INSERT INTO test_log (username, content)

VALUES (user, table_name);

END;

三、系统触发器(system-level triggers)

系统触发器是指在某些特殊情况下触发,主要监控低级数据库内部事件,只在和表或数据库对象无关的特定事件发生时才触发,例如:数据库启动、关闭、重启、用户登录等事件都可以由系统触发器进行响应。系统触发器示例:

1、在数据库重新启动时自动检查合法性:

CREATE OR REPLACE TRIGGER system_event_trigger

AFTER STARTUP ON DATABASE

BEGIN

EXECUTE immediate ‘ALTER DATABASE OPEN’;

END;

2、在用户登录时自动记录到日志:

CREATE OR REPLACE TRIGGER log_trigger

AFTER LOGIN ON SCHEMA

DECLARE

tablename VARCHAR2(30) := ‘TEST’;

BEGIN

INSERT INTO test_log (username, content)

VALUES (user, ‘USER LOGIN’);

END;

应用方面,Oracle触发器可以用来实现数据库运行时的许多自动操作,如:删除超时记录、数据完整性约束自动检测、DML语句记录、日志辅助等,而且它可以大大提高系统的可靠性,具有少调用程序、实时返回结果等特点,可以与其他特定功能结合使用,大大减少系统管理员在数据库指令上所花费的时间和工作量。


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