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语句记录、日志辅助等,而且它可以大大提高系统的可靠性,具有少调用程序、实时返回结果等特点,可以与其他特定功能结合使用,大大减少系统管理员在数据库指令上所花费的时间和工作量。