首批通过分布式安全可靠测评,为关键业务系统打造
概述
更新时间:2024-12-20 23:00:00
触发器是 OceanBase 数据库中为 Oracle 租户提供的功能,它类似过程和函数,是包含声明、执行和异常处理过程的 PL 块。触发器基于特定事件被执行,可以指定触发器是在事件之前还是之后触发,以及触发器是针对单个事件还是被事件执行影响的某行数据。
触发器是一个独立的对象,当某个事件发生时自动地隐式运行,而且触发器不能接收参数。这里的事件指的是对数据库的表进行的 INSERT、UPDATE 及 DELETE 操作。
注意
OceanBase 数据库 V2.2.7x 及以下版本仅支持表上的行级触发器。
一个简单的触发器的触发时机有四个点:
在事件执行之前(语句级别的 BEFORE 触发器)
在事件执行之后(语句级别的 AFTER 触发器)
在每行被事件执行影响之前(行级的 BEFORE 触发器)
在每行被事件执行影响之后(行级的 AFTER 触发器)
一个 DML 语句可能会触发多个简单的触发器,触发执行顺序是:语句级 BEFORE 触发器 -> 行级 BEFORE 触发器 -> 行级 AFTER 触发器 -> 语句级 AFTER 触发器。同一类型的触发器的执行顺序是不确定的,当前暂不支持指定触发器的执行顺序。
触发器可以是简单的,也可以是组合的。OceanBase 数据库当前主要支持以下几种 DML 触发器:
行级触发器
语句级触发器
INSTEAD OF 触发器
INSTEAD OF 触发器可以创建在可编辑视图与不可编辑视图上,用于更新视图。
组合触发器
一个组合触发器中可以包含行前、行后、语句前、语句后四种触发事件中的一到四种或只包含一个 INSTEAD OF 触发事件。