zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

洞悉Oracle触发器:它们的类型及其特点(oracle触发器类型)

Oracle 类型 触发器 及其 特点 它们 洞悉
2023-06-13 09:14:49 时间

Oracle 触发器 (trigger) 是一种特殊的数据库对象,可以在表上绑定,它的工作原理是检查是否有新的行插入/更新/删除操作发生,有触发器可以立即执行其定义的动作。它们可以让用户编写动态应用程序和更智能的数据库功能。

Oracle 提供了 3 种类型的触发器,分别为:

1.BEFORE 触发器:BEFORE 触发器会在 DML 操作前执行,无论 DML 操作是否成功都会执行。它的结果可能是修改被更新的行,通过在 trigger 里抛出例外而阻止 DML 操作,或者使用 trigger 做其他附加的工作,如创建额外的审计日志记录。下面的示例显示了一个 BEFORE 触发器,它检查被更新的表(Emp)是否已满。

CREATE OR REPLACE TRIGGER trg_before_emp_insert
BEFORE INSERT ON EmpFOR EACH ROW
BEGIN IF (SELECT COUNT(*) FROM Emp) = 10 THEN
RAISE_APPLICATION_ERROR(-20041, "Employees table is full"); END IF;
END;

2.AFTER触发器:AFTER 触发器会在 DML 操作成功后立即被执行,在这类触发器里,对新插入/更新/删除的行不会有影响。AFTER 触发器一般用来处理 DML 操作已经成功完成后的一些后处理工作,比如说创建某个特定报表文件,更新某个外部表,或者是备份最近发生的改变。下面的示例显示了一个 AFTER 触发器,它在插入新的行后创建一条新的审计日志记录。

CREATE OR REPLACE TRIGGER trg_after_emp_insert 
AFTER INSERT ON EmpFOR EACH ROW
BEGIN INSERT INTO Emp_Audit VALUES (USER, SYSDATE, "INSERT", "Name="||:NEW.Name);
END;

3.COMBINED 触发器:COMBINED 触发器又称组合触发器,它的行为表现的是 BEFORE 和 AFTER 触发器合二为一的行为。组合触发器在执行前或执行后都可以修改新/更新/删除的行(ROW),可以在组合触发器里抛出例外,满足一定条件就可以阻止 DML 操作或者其他一些附加的工作可以在组合触发器里实现。下面的示例显示了一个 COMBINED 触发器,它同时完成了检查 Emp 表的工作和创建审计日志。

CREATE OR REPLACE TRIGGER trg_combined_emp_insert 
BEFORE INSERT ON EmpFOR EACH ROW
BEGIN IF (SELECT COUNT(*) FROM Emp) = 10 THEN
RAISE_APPLICATION_ERROR(-20041, "Employees table is full"); ELSE
INSERT INTO Emp_Audit VALUES (USER, SYSDATE, "INSERT", "Name="||:NEW.Name); END IF;
END;

通过这三种类型的 Oracle 触发器,Web 开发人员和数据库管理员可以把更具体的任务留给数据库服务器,避免无谓的程序开发和维护,提升程序的效率和质量。


我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题

本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 洞悉Oracle触发器:它们的类型及其特点(oracle触发器类型)