深入解析Oracle触发器类型(oracle触发器类型)

Oracle触发器是一种可以根据指定条件自动执行指定SQL语句的操作,可以控制DML操作(插入、更新、删除)。其执行控制不受应用程序控制,可以避免重复和多次处理或参数检查的错误,用于实现为提供数据的历史记录或并发管理的某种数据库变化情况。Oracle触发器有三种常用类型,分别是行触发器(row-level trigger),状态触发器(statement-level trigger)和系统触发器(system trigger)。

行触发器(row-level trigger)是一种随着DML操作行数据的改变而执行的触发器,ORACLE数据库提供了BEFORE, AFTER,及INSTEAD OF触发器,它们分别对应于UPDATE,INSERT及DELETE的操作,当INSERT,UPDATE或DELETE指令执行时,这几个触发器会被自动激活。

一般来说,BEFORE和INSTEAD OF触发器可以改变DML语句的行为,而AFTER触发器无法改变DML操作的时序,其主要是用于取代由应用程序编写的记录处理程序。例如在DML操作之后,可以用AFTER触发器来更新外部文件或记录操作历史:

CREATE TRIGGER after_insert_emp AFTER INSERT ON emp

FOR EACH ROW

BEGIN

INSERT INTO emp_hist(emp_id, user_name, action, datetime)

VALUES (:NEW.emp_ID, USER, ‘INSERT’, SYSDATE);

END;

状态触发器(statement-level trigger)是一种随着DML语句而激活的触发器,它并不会受到DML操作的行数据变化而影响,只要在一条DML操作中出现,即可触发该触发器。

例如,一 permit_exe_statement_trigger触发器可以被用于保护表:

CREATE OR REPLACE TRIGGER permit_exe_statement_trigger

BEFORE DELETE OR INSERT OR UPDATE ON 部门

BEGIN

IF NOT EXISTS (SELECT * from users where name=sys_context(‘USERENV’,’SESSION_USER’))

THEN

RAISE_APPLICATION_ERROR(-20999,’No Permission’);

END IF;

END;

系统触发器(system trigger)是受到系统变化而激活的触发器,它以特殊的事件作为状态触发器的触发条件,在不同的系统事件中,系统触发器执行的任务也是不同的。

ORACLE提供了多种系统事件,由这些系统事件驱动,它们可以做如下操作:

1. 监控系统数据:可以通过监控系统事件来监控系统数据,并及时发布警报;

2. 监控行为:可以通过系统触发器的发布规则,对不符合正常使用规范的用户行为及时进行监控;

3. 知识库:可以通过系统触发器的应用,让系统产生相应的记录,用于以后的数据查询;

4. 服务管理:可以控制与系统数据有关的服务管理,确保系统数据的安全。

总之,Oracle触发器具有重要作用,它可以实现一系列操作,如限制某些操作,维护历史记录,记录日志等,为数据库集群的安全与正常运行做出了重要贡献。


数据运维技术 » 深入解析Oracle触发器类型(oracle触发器类型)