深入解析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数据库触发器的用途和使用方法,希望对大家有所帮助。