REFERENCING 和 FOR 子句

REFERENCING 子句可以声明原始值的相关名称和 FOR 子句指定的 table_object 列中的已更改的值相关名称。

REFERENCING 和 FOR 子句
元素 描述 限制 语法
correlation 在此定义的触发器例程中限定旧的或新的列值( correlation.column 不能是 table_object 标识符
owner table_object 的所有者 必须拥有 table_object 所有者名称
table_object 具有可以调用 function 的触发器的表或视图的名称或同义词 必须存在于本地数据库中 标识符

如果您在 CREATE FUNCTION 语句列表之后立即包含 REFERENCING 和 FOR table_object 子句,则您创建的函数被称为触发器函数(或 触发器 UDR触发器例程)。 FOR 子句指定触发器可以从它们的 Triggered Action 列表的 FOR EACH ROW 部分调用函数的表或视图。

在 REFERENCING 子句中,OLD correlation指定一个前缀,通过该前缀触发器例程可以引用 table_object 列在触发器例程修改列值之前所具有的值。 NEW correlation 指定用于引用触发器例程分配给该列的新值的前缀。无论该触发器例程是否能使用 correlation 名引用 OLD 列值,NEW 列值或者这两种类型的值都取决于正在触发事件的类型: 有关如何在触发动作中使用 correlation.column 符号的信息,请参阅 REFERENCING 子句
除了任何以 SPL 语言编写 GBase 8s UDR 的一般需求,触发器例程支持某些附加语法特性,并且受到一定的限制,对于不是触发器例程的一般 UDR ,它们不支持此功能(或者不受此限制):

有关 mi_trigger API 的更多信息,请参阅 GBase 8s DataBlade API 程序员指南GBase 8s DataBlade API 函数参考

如果您包含 REFERENCING 子句但省略了 FOR 子句,或者您包含 FOR 子句但省略了 REFERENCING 子句,则 CREATE FUNCTION 语句发生错误而失败。

如果您都省略了 REFERENCING 和 FOR 子句,则 UDR 不能使用 SELECTING 、INSERTING 、DELETING 和 UPDATING 运算符,并且不能声明可以表示和操纵触发器定义指定的表或视图上触发动作的列值。

有关 Delete 、Insert 、Select 和 Update 触发器的 REFERENCING 子句的语法的描述,请参阅 CREATE TRIGGER 语句中有关 REFERENCING 子句部分。

1 该路径只能使用一次