关于触发器

触发器是一个存储在数据库中的 PL/SQL 单元,可以自动执行(“触发”)以响应指定事件(如果约束条件处于启用状态)。

触发器具有如下结构:

TRIGGER trigger_name
  triggering_event
  [ trigger_restriction ]
BEGIN
  triggered_action;
END;

trigger_name 对方案中的触发器必须是唯一的。触发器可以与方案中的其他对象 (例如某个表) 具有相同名称,但 Oracle 建议使用一种可避免混淆的命名惯例。

如果触发器处于 enabled 状态,则 triggering_event 会导致数据库在 trigger_restriction 为 TRUE 或省略时运行 triggerred_action。triggering_event 与表、视图、方案或数据库关联,它可以是以下对象之一:

如果触发器处于 disabled 状态,则 triggering_event 不会导致数据库运行 triggerred_action,即使 trigger_restriction 为 TRUE 或省略也是如此。

默认情况下,触发器在创建后处于启用状态。您可以禁用处于启用状态的触发器,也可以启用处于禁用状态的触发器。

与子程序不同,您不能直接调用触发器。触发器只能由其触发事件调用,而触发事件可由任何用户或应用程序导致。您可能不会察觉到触发器执行,除非它导致了一个未正确处理的错误。

简单触发器可在以下时间点之一准时触发:

复合触发器可在多个时间点触发。有关复合触发器的信息,请参阅 Oracle AI Database PL/SQL Language Reference

INSTEAD OF 触发器在视图上定义,它的触发事件是一个 DML 语句。数据库运行 INSTEAD OF 触发器,而不是执行 DML 语句。有关详细信息,请参阅“创建 INSTEAD OF 触发器”。

系统触发器在方案或数据库上定义。定义在方案上的触发器将会在发生与方案所有者 (当前用户) 关联的各个事件时触发。定义在数据库上的触发器将会在发生与所有用户关联的各个事件时触发。

触发器的一种用途是强制应用适用于所有客户机应用程序的业务规则。例如,假设添加到 EMPLOYEES 表的数据必须具有某种格式,并且有多种客户机应用程序可以向此表中添加数据。通过在此表上定义一个触发器,可确保添加到此表中的所有数据都具有正确的格式。由于该触发器将在任何客户机向此表中添加数据时运行,因此没有客户机可以绕过此规则,而且您只需在触发器上存储和维护用于强制执行该规则的代码,而不需要在每个客户机应用程序中执行该规则。有关触发器的其他用途,请参阅 Oracle AI Database PL/SQL Language Reference

另请参阅: Oracle AI Database PL/SQL Language Reference,了解有关触发器的完整信息