灵活掌控:Oracle 触发器类型深度探索(oracle触发器类型)

Oracle 触发器既可以在响应用户交互或者特定操作时被触发,又可以在数据改变时系统自动运行指定的PL/SQL 字句,满足企业的一些特殊的业务处理需求。Oracle 触发器主要有 BEFORE(在指定事件之前)、AFTER(在指定事件之后)、INSTEAD OF(替代指定事件)三种类型,依据不同的业务场景,可以根据不同的类型进行灵活掌控。

BEFORE触发器允许一系列记录行被插入,更新,删除之前被触发所执行的SQL 字句,Oracle 执行完影响数据表的change操作后,再执行BEFORE 触发器。BEFORE 触发器也可以帮助我们完成数据校验等任务,比如:当用户插入数据前需要检查,以防止不必要的错误。我们可以在 INSERT 之前启动一个BEFORE 触发器,检查并拦截某些不符合要求的数据,比如:

CREATE OR REPLACE TRIGGER trg_c_before_insert
BEFORE INSERT
ON student
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
IF : NEW.score > 100 OR : NEW.score
RAISE_APPLICATION_ERROR (-20000,'学生成绩必须在0-100之间');
END IF;
END;

AFTER触发器在插入,更新和删除完一系列记录后才触发,这就使得我们可以进行数据清理工作,比如 TEXT 字段,在其他表中需要得到更新,我们可以通过设置AFTER触发器,在UPDATE操作完成的立即进行同步,可以使用如下的代码实现:

CREATE OR REPLACE TRIGGER trg_c_after_update
AFTER UPDATE
ON student
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
UPDATE t_student
SET t_score = : NEW.score
WHERE t_name = : NEW.name;
END;

最后,INSTEAD OF触发器可以替代掉已经存在的事件,它会忽略SQL 操作并且不作任何修改,这种用来替代指定操作的INSTEAD OF触发器经常被应用在视图操作中,用来对视图不能有效完成的SQL 语句进行处理,比如:

CREATE OR REPLACE TRIGGER trg_c_insteadof
INSTEAD OF UPDATE
ON v_student
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
UPDATE t_student
SET t_score = : NEW.score
WHERE t_name = : NEW.name;
END;

总之,Oracle提供了多种不同类型的触发器,武装着它们,码农们可以轻松满足各式各类的复杂业务场景,同时,灵活运用不同的Oracle 触发器类型进行深度控制,可以提升企业的数据库性能,使其可靠的服务大众。


数据运维技术 » 灵活掌控:Oracle 触发器类型深度探索(oracle触发器类型)