Oracle触发器:不同类型的功能分析(oracle触发器类型)

Oracle 触发器是一种能够基于某操作自动执行指定操作的功能,他相当于一个规则表达式,它规定了特定的条件,当这些条件被满足的时候,触发器就会被触发,从而运行一条特定的SQL语句。Oracle 触发器一般用于创建各种数据检查、记录操作历史等功能,以保护数据完整性和一致性。下面将结合实例进行介绍Oracle 触发器不同类型的功能分析:

一、行触发器

行触发器定义在表上,它是对对象操作时,看到的每一行数据执行操作。其语法如下:

CREATE OR REPLACE TRIGGER

[BEFORE|AFTER] [INSERT|UPDATE|DELETE]

ON

[FOR EACH ROW]

BEGIN

END;

实例: 创建一个表

CREATE TABLE company

(

ID Varchar2(10),

name Varchar2(20)

);

表创建成功后,创建触发器,每次在company表中插入新数据都会向一个表日志数据中插入记录,实现记录系统改变的功能,其语法如下:

CREATE OR REPLACE TRIGGER log_company_data

AFTER INSERT

ON company

FOR EACH ROW

BEGIN

INSERT INTO log_company (data) values (:NEW.id);

END;

二、DML触发器

DML触发器不仅响应表行的插入,更新和删除操作,同时可以响应多部分的DML(Data Modification Language)

语句,它的语法格式如下,可以处理多条DML语句:

CREATE OR REPLACE TRIGGER

[BEFORE|AFTER] [INSERT|UPDATE|DELETE]

ON

DECLARE

BEGIN

END;

实例: 假设要在company表中查看每条数据应该满足的条件,它以每次操作一步是以都应该记录到日志表中,可以使用DML触发器来实现该效果,它对对象的操作时都看到更加详细的每行数据,而不仅仅是每一行,可以根据实际情况判断是否应该记录到日志表中,其语法如下:

CREATE OR REPLACE TRIGGER log_company_data

AFTER INSERT OR UPDATE OR DELETE

ON company

FOR EACH ROW

BEGIN

IF UPDATING THEN

INSERT INTO log_company (data,action)

values (:NEW.id,’update’);

ELSIF DELETING THEN

INSERT INTO log_company (data,action)

values (:OLD.id,’delete’);

ELSIF INSERTING THEN

INSERT INTO log_company (data,action)

values (:NEW.id,’insert’);

END IF;

END;

三、系统触发器

我们可以创建一个系统触发器来响应系统底层的事件,系统触发器的语法格式如下:

CREATE OR REPLACE TRIGGER

[BEFORE|AFTER] [ LOGON | LOGOFF |SERVERERROR | SHUTDOWN ]

ON

BEGIN

END;

实例: 在数据库登录时制定输出一条日志消息,它的语法如下:

CREATE OR REPLACE TRIGGER logon_info

AFTER LOGON

ON sys.schema

BEGIN

INSERT INTO logon_log (data) VALUES (sysdate);

END;

以上就是Oracle触发器不同类型的功能分析,Oracle触发器提供了一种灵活的机制,能够使我们可以在某个动作发生时自动执行特定操作,从而保证数据库的完整性,同时也实现了系统自动化,提高数据库管理效率,而且可以满足多种类型的应用场景,因此在数据库开发中使用Oracle触发器,可以大大提高系统的效率和易维护性。


数据运维技术 » Oracle触发器:不同类型的功能分析(oracle触发器类型)