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触发器,可以大大提高系统的效率和易维护性。
编辑:568数据
标签:触发器,操作,语法,数据,系统