使用全局变量

使用全局变量需要了解用法限制,分配给全局变量的规则以及检索全局变量值的规则。

使用限制

可从任何 SQL 表达式中引用全局变量,除非该表达式的上下文要求该表达式具有确定性。 以下情况是需要确定性表达式的上下文的示例,因此不允许使用全局变量:
  • 在表检查约束或数据类型检查约束中
  • 在生成的表达式列的定义中
  • 在刷新立即具体化查询表 (MQT) 中

如果全局变量的数据类型是游标类型,那么可以在可以指定 cursor-variable-name 的任何位置引用全局游标变量的底层游标。

如果全局变量的数据类型是行类型,那么可以在可以引用与该字段类型相同的全局变量的任何位置引用全局行变量的字段。 限定字段名称的全局变量名称将以与任何其他全局变量名称相同的方式进行解析。

转让

如果满足以下两个条件,那么可以更改全局变量的值:
  • 全局变量不是只读变量。
  • 该语句的授权标识有权写入全局变量。
可以使用下列任何 SQL 语句将值赋给全局变量:
  • 以全局变量作为目标变量的 SET 变量语句
  • 将全局变量作为 INTO 子句中的赋值目标的 EXECUTE , FETCH , SELECT INTO 或 VALUE INTO 语句
  • 将全局变量作为过程的 OUT 或 INOUT 参数的自变量的 CALL 语句
  • 将全局变量作为函数的 OUT 或 INOUT 参数的自变量的函数调用 (仅 SET 变量语句的源表达式支持此操作)。

检索

全局变量的值是通过从需要该值的 SQL 上下文中引用该变量获得的。

下表显示了读取全局变量的值 (对于该全局变量的指示引用) 的时间。

表 1. 根据参考上下文读取全局变量的值时
全局变量引用的上下文 该引用在以下开头使用全局变量的值:
复合 SQL (内联) 语句中的 SQL 语句 复合 SQL (内联) 语句
复合 SQL (编译型) 语句中的 SQL 语句 复合 SQL (编译型) 语句中的 SQL 语句
SQL 语句,可能包含函数调用或触发器激活1 SQL 语句
调用的内联 SQL 函数中的 SQL 语句 调用内联 SQL 函数的 SQL 语句
激活的内联触发器中的 SQL 语句 激活内联触发器的 SQL 语句
调用的内联 SQL 方法中的 SQL 语句 调用内联 SQL 方法的 SQL 语句
调用的编译型 SQL 函数中的 SQL 语句 编译的 SQL 函数中的 SQL 语句
已激活的已编译触发器中的 SQL 语句 编译的触发器中的 SQL 语句
调用的外部例程中的 SQL 语句 外部例程中的 SQL 语句
注: 1 在此表中,可能调用函数或激活触发器的 SQL 语句不包含复合 SQL (内联) 语句或复合 SQL (编译) 语句。