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

Oracle数据库触发器是指用于自动修改表数据的特殊存储程序,可以以不同的方式监控会话对特定表的INSERT,UPDATE,DELETE,ALTER和CREATE等操作的行为,从而实现数据的完整性。Oracle数据库触发器类型不止一种,本文将分别介绍Before触发器、Row触发器、Instead-of触发器。

BEFORE触发器

BEFORE触发器的书写形式为

create trigger 触发器名称

before INSERT or UPDATE or DELETE

on 表名

for each row

它可以在DML语句之前调用,监控表的插入、更新、删除等操作,当DML语句执行时,它会优先执行,根据返回值判断是否允许操作继续执行,例如:

CREATE OR REPLACE TRIGGER update_equipment

BEFORE INSERT or UPDATE ON EQUIPMENT

FOR EACH ROW

BEGIN

if :NEW.EQUIPMENT_NAME is NULL then

RAISE_APPLICATION_ERROR(-20202, ‘器材名不允许为空’);

END IF;

END;

这段代码会在新增/编辑EQUIPMENT表中的记录时,判断器材名是否为空,如果为空会抛出一个错误,就不会继续执行后续步骤,表记录也不会变更。

ROW触发器

ROW触发器也是用来监控表中插入、更新、删除等操作,但是它可以对每一行数据进行单独处理,书写格式为:

CREATE TRIGGER 触发器名称

AFTER INSERT or UPDATE or DELETE

ON 表名

REFERENCING NEW AS newrow

FOR EACH ROW

它可以在每个SQL语句执行后执行,也可访问被修改的行的属性,比如:

CREATE OR REPLACE TRIGGER add_cost

AFTER INSERT on EQUIPMENT

REFERENCING NEW AS newrow

FOR EACH ROW

BEGIN

UPDATE EQUIPMENT

SET COST = COST + newrow.EQ_COST

WHERE ID = newrow.EQUIPMENT_ID;

END;

上面的代码就是在向EQUIPMENT表插入一条记录时,对该条记录的cost字段进行更新操作。

INSTED-OF触发器

INSTED-OF触发器是一种特殊的触发器,它不监控表记录的变更,而是监控视图的变更,书写格式为:

CREATE TRIGGER 触发器名称

INSTEAD OF INSERT or UPDATE or DELETE

ON 视图名

FOR EACH ROW

可以用它修改或者删除视图里面的记录,例如:

CREATE OR REPLACE TRIGGER update_view

INSTEAD OF UPDATE ON EQUIPMENT_VIEW

FOR EACH ROW

BEGIN

UPDATE EQUIPMENT

SET EQUIPMENT_NAME = :NEW.EQUIPMENT_NAME

WHERE ID = :NEW.EQUIPMENT_ID;

END;

上面的代码是用INSTED-OF触发器监控EQUIPMENT_VIEW视图的更新操作,当EQUIPMENT_VIEW视图被更新时,触发器就会把该更新操作转移到EQUIPMENT表中进行更新操作。

总结

在实现数据库数据完整性方面,Oracle数据库触发器类型可以提供有效帮助。本文从Before触发器、Row触发器、Instead-of触发器三个方面介绍了Oracle数据库触发器的用途和使用方法,希望对大家有所帮助。


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