掌握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 ROWDECLARE
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触发器的三种类型,在应用程序和数据库之间提供高效的数据访问,完成数据并发控制、数据安全性和数据一致性的相关检查,是实现数据库自动化审计和程序中常用的数据库功能。