掌握Oracle触发器的种类知识(oracle触发器类型)

Oracle触发器是数据库功能之一,可以让开发者实现数据可控的一些操作,例如增加数据安全性、确保数据一致性、更新数据库内容、约束完整性和控制访问等。Oracle触发器是在数据的插入、修改、删除时自动激活的,它可以在应用程序级别和数据库级别之间提供连接,数据库触发器是实现CRUD自动化以及数据库安全审计的重要工具。

Oracle触发器主要包括三类:

1.行触发器(Row Level Trigger)

行触发器主要在特定表的某行发生变化,就会自动触发特定的行为,是基于行的变化才触发的,其主要作用就是保证数据库的完整性,在插入或更新数据时,可以检查和修改或校正数据,使唯一性约束能被正常触发,比如这段Oracle触发器:

CREATE OR REPLACE TRIGGER tgr_update BEFORE
INSERT OR UPDATE ON tab_leave FOR EACH ROW
DECLARE
nleft INT;
BEGIN
SELECT nvl(a.left,0) INTO nleft
FROM tab_account a
WHERE a.FLAG = :NEW.FLAG;
IF :NEW.left > nleft THEN raise_application_error(-20001,'请检查记录!');
END;

2.语句级触发器(Statement Level Trigger)

语句级触发器主要是在一个SQL语句执行完毕后触发的,例如可在DELETE或INSERT/UPDATE的操作之后自动触发一个INSERT操作,将这一次的操作记录输出到日志文件,也可自动更新数据库的某个全局表或者发送邮件,完成特定的任务,比如这段Oracle触发器:

CREATE OR REPLACE TRIGGER tgr_delete AFTER 
DELETE ON tab_leave
FOR EACH ROW
BEGIN
INSERT INTO tab_logs
(ID,OPERATOR,OPERATION_TIME,OPERATION)
VALUES
(SEQ_LOG.NEXTVAL,USER,SYSDATE,'DELETE');
END;

3.系统触发器(System Level Trigger)

系统触发器主要是当用户登录或者登出数据库时自动执行,检测用户登录信息以及审计日志等,比如当用户登录时,自动把一个新的session创建进去,或者把这次登录的登录名,登录时间等写到日志表里,并且记录下来。比如这段Oracle触发器:

CREATE OR REPLACE TRIGGER tgr_logon 
BEFORE LOGON ON DATABASE
BEGIN
INSERT INTO tab_logs
(ID,OPERATOR,OPERATION_TIME,OPERATION)
VALUES
(SEQ_LOG.NEXTVAL,USER,SYSDATE,'登录');
END;

以上就是Oracle触发器的三种类型,在应用程序和数据库之间提供高效的数据访问,完成数据并发控制、数据安全性和数据一致性的相关检查,是实现数据库自动化审计和程序中常用的数据库功能。


数据运维技术 » 掌握Oracle触发器的种类知识(oracle触发器类型)