触发器和 SPL 例程

您不能如在数据操纵语言语句中列出的那样,在 DML(数据操纵语言)语句中调用的 SPL 例程中定义触发器。因此,如果 sp_items 过程包含CREATE TRIGGER 语句,则以下语句返回错误:
INSERT INTO items EXECUTE PROCEDURE sp_items;

您不能将 SQL 的 CREATE FUNCTION 或 CREATE PROCEDURE 语句与 REFERENCING 子句一起使用来定义包含 FOR table 或 FOR view 规范的触发器例程。这些 UDR 必须包含在指定的视图中为 OLD 或 NEW 列值声明的 correlation 名称的 REFERENCING 子句。视图上的触发器可以调用来自 Triggered Action 列表中 FOR EACH ROW 部分的触发器例程。触发器还可以调用来自 Triggered Action 列表 BEFORE 和 AFTER 部分的非触发器例程,但是这些 UDR 不能使用 correlation 名称来引用 NEW 或 OLD 列值。正如 REFERENCING 子句 中描述的那样,触发器例程中的 REFERENCING 子句支持与 CREATE TRIGGER 语句相同的语法。

由同一触发事件执行的多个触发器可调用多个触发例程,并且这些例程可以通过使用具有相同或不同名称的 SPL 变量访问同一 NEW 或 OLD 列值。当一个触发事件执行多个触发器时,不会授权执行的顺序时,但是所有的 BEFORE 触发器操作都会在 FOR EACH ROW 触发操作之前执行,而所有的 AFTER 触发操作会在所有的 FOR EACH ROW 触发操作后执行。

对于不是触发器例程的 UDR ,SPL 变量在 CREATE TRIGGER 语句中无效。触发器调用的 SPL 例程只能在当前数据库的本地表或本地视图上执行 INSERT 、DELETE 或 UPDATE 操作。另请参阅 SPL 例程的规则以获取关于触发操作中调用的 SPL 例程的附加限制的信息。