对 SQL 参数, SQL 变量和全局变量的引用

可以在 SQL 过程语句中指定表达式或变量的任何位置引用 SQL 参数, SQL 变量和全局变量。

不能在 SQL 例程, SQL 触发器或动态复合语句中指定主变量。 可以在例程主体中的任何位置引用 SQL 参数,并且可以使用例程名称进行限定。 可以在声明 SQL 变量的复合语句中的任何位置引用这些变量,并且可以使用在复合语句开头指定的标签名称进行限定。 如果 SQL 参数或 SQL 变量具有行数据类型,那么可以在任何位置引用字段,也可以引用 SQL 参数或 SQL 变量。 只要表达式不需要确定性,就可以在任何表达式中引用全局变量。 以下场景需要确定性表达式,这将阻止使用全局变量:
  • 检查约束
  • 生成的列的定义
  • 刷新立即 MQT

所有 SQL 参数, SQL 变量,行变量字段和全局变量都被视为可空。 SQL 例程中 SQL 参数, SQL 变量,行变量字段或全局变量的名称可以与例程中引用的表或视图中列的名称相同。 SQL 变量 或行变量字段 的名称也可以与同一例程中声明的另一个 SQL 变量 或行变量字段 的名称相同。 当在不同的复合语句中声明这两个 SQL 变量时,可能会发生此情况。 包含 SQL 变量声明的复合语句确定该变量的作用域。 有关更多信息,请参阅 复合 SQL (编译型) 语句

SQL 例程中 SQL 变量或 SQL 参数的名称可以与某些 SQL 语句中使用的标识的名称相同。 如果未限定该名称,那么以下规则描述该名称是引用标识还是引用 SQL 参数或 SQL 变量:
  • 在 SET PATH 和 SET SCHEMA 语句中,会将名称作为 SQL 参数或 SQL 变量进行检查。 如果找不到 SQL 变量或 SQL 参数,那么会将其用作标识。
  • 在 CONNECT , DISCONNECT , RELEASE 和 SET CONNECTION 语句中,该名称用作标识。
应该显式限定相同名称。 限定名称明确指示该名称是指列, SQL 变量, SQL 参数,行变量字段还是全局变量。 如果名称未限定或已限定但仍有岐义,那么以下规则将描述该名称是指列, SQL 变量, SQL 参数还是全局变量:
  • 如果 SQL 例程主体中指定的表和视图在创建例程时存在,那么会首先将该名称作为列名进行检查。 如果未作为列找到,那么将其作为复合语句中的 SQL 变量进行检查,然后将其作为 SQL 参数进行检查,最后将其作为全局变量进行检查。
  • 如果在创建例程时引用的表或视图不存在,那么将首先在复合语句中作为 SQL 变量检查该名称,然后作为 SQL 参数检查该名称,然后作为全局变量检查该名称。 可以在包含引用的复合语句中声明该变量,也可以在嵌套该复合语句的复合语句中声明该变量。 如果两个 SQL 变量在同一作用域内且具有相同的名称 (如果它们在不同的复合语句中声明) ,那么将使用在最内部复合语句中声明的 SQL 变量。 如果找不到,那么假定它是列。