VALUES INTO 语句

VALUES INTO 语句生成最多由一行组成的结果表,并将该行中的值分配给主变量。

调用

此语句只能嵌入到应用程序中。 这是一个无法动态准备的可执行语句。

授权

语句的授权标识所拥有的特权必须包括执行每个 表达式row-expression所必需的任何特权。

对于用作 assignment-target的每个全局变量,语句的授权标识所拥有的特权必须包含下列其中一个权限:
  • 对未在模块中定义的全局变量的 WRITE 特权
  • 模块中定义的全局变量模块的 EXECUTE 特权
  • 包含模块中定义的全局变量模块的模式的 EXECUTEIN 特权
  • 包含模块中定义的全局变量模块的模式的 DATAACCESS 权限

语法

Read syntax diagramSkip visual syntax diagramVALUESexpression(,expression)row-expressionINTO,assignment-target

assignment-target

Read syntax diagramSkip visual syntax diagram global-variable-namehost-variable-nameSQL-parameter-nameSQL-variable-nametransition-variable-namearray-variable-name[array-index]field-reference

描述

引入由一列或多列组成的单行。
expression
用于定义单列结果表的单个值的表达式。
表达
一个或多个表达式,用于定义结果表的一个或多个列的值。
row-expression
指定新值行。 row-expression行表达式中描述的类型的任何行表达式。 row-expression 不得包含列名。
INTO 分配-目标
标识用于分配输出值的一个或多个目标。

结果行中的第一个值分配给列表中的第一个目标,第二个值分配给第二个目标,依此类推。 对 assignment-target 的每个分配都是通过列表按顺序进行的。 如果在任何分配上发生错误,那么不会将任何值分配给任何 assignment-target

当每个 assignment-target 的数据类型不是行类型时,如果 assignment-targets 的数目小于 结果列值。

如果 assignment-target 的数据类型是行类型,那么必须正好指定一个 assignment-target (SQLSTATE 428HR) ,列数必须与 行类型以及访存行的列的数据类型必须可指定给行类型的相应字段 (SQLSTATE 42821)。

如果 assignment-target 的数据类型是数组元素,那么必须正好指定一个 assignment-target

全局变量名
标识作为赋值目标的全局变量。
主机变量名
标识作为赋值目标的主变量。 对于 LOB 输出值,目标可以是常规主变量 (如果足够大) , LOB 定位器变量或 LOB 文件引用变量。
SQL-parameter-name
标识作为分配目标的名称参数。
SQL-variable-name
标识作为赋值目标的 SQL 变量。 必须先声明 SQL 变量,然后才能使用这些变量。
转换变量名
标识要在转换行中更新的列。 转换变量名称 必须标识触发器的主题表中的列, (可选) 由用于标识新值的相关名称限定。
数组变量名
标识数组类型的 SQL 变量, SQL 参数或全局变量。
[数组索引]
一个表达式,用于指定数组中的哪个元素将成为赋值的目标。 对于普通数组, array-index 表达式必须可分配给 INTEGER (SQLSTATE 428H1) ,并且不能为空值。 其值必须介于 1 与为数组定义的最大基数之间 (SQLSTATE 2202E)。 对于关联数组, array-index 表达式必须可指定给关联数组的索引数据类型 (SQLSTATE 428H1) ,并且不能为空值。
字段-参考
标识作为分配目标的行类型值中的字段。 field-reference 必须指定为限定 field-name ,其中限定符标识定义字段的行值。

规则

  • 不能在未使用复合 SQL (编译型) 语句定义的触发器,未使用复合 SQL (编译型) 语句定义的函数,方法或复合 SQL (内联型) 语句 (SQLSTATE 428GX) 中指定全局变量。

示例

  • 示例 1: 此 C 示例将 CURRENT PATH 专用寄存器的值检索到主变量中。
       EXEC SQL VALUES(CURRENT PATH)
                INTO :hvl;
  • 示例 2: 此 C 示例将 LOB 字段的一部分检索到主变量中,利用 LOB 定位器进行延迟检索。
       EXEC SQL VALUES (substr(:locator1,35))
                INTO :details;
  • 示例 3: 此 C 示例将 SESSION_USER 专用寄存器的值检索到全局变量中。
       EXEC SQL VALUES(SESSION_USER)
         INTO GV_SESS_USER;