VALUES INTO 语句
VALUES INTO 语句生成最多由一行组成的结果表,并将该行中的值分配给主变量。
调用
此语句只能嵌入到应用程序中。 这是一个无法动态准备的可执行语句。
授权
语句的授权标识所拥有的特权必须包括执行每个 表达式 和 row-expression所必需的任何特权。
对于用作 assignment-target的每个全局变量,语句的授权标识所拥有的特权必须包含下列其中一个权限:
- 对未在模块中定义的全局变量的 WRITE 特权
- 模块中定义的全局变量模块的 EXECUTE 特权
- 包含模块中定义的全局变量模块的模式的 EXECUTEIN 特权
- 包含模块中定义的全局变量模块的模式的 DATAACCESS 权限
语法
描述
- 值
- 引入由一列或多列组成的单行。
- 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;
