VALUES INTO 语句
VALUES INTO语句为变量赋值。
调用 VALUES INTO
此语句只能嵌入在应用程序中。 这是一个无法动态准备的可执行语句。
授权 VALUES INTO
- 语句中确定的每个表和视图的 SELECT 权限
- 声明中确定的每张桌子和每处景观的所有权
- 对语句中标识的任何全局变量具有读和写权限
- 对声明中确定的任何全局变量的所有权
- DBADM 数据库权限(仅限表格)
- DATAACCESS 权限
- SYSADM 权限
- SYSCTRL权限(仅限目录表)
对于赋值给全局变量或数组元素的全局变量,权限集必须至少包含以下内容之一:

- 可变WRITE权限
- 可变的所有权
- DATAACCESS 权限
- SYSADM 权限

对于过渡变量的赋值,权限集必须至少包含以下内容之一:

- 定义了包含赋值语句的触发器的表或视图的UPDATE权限
- 更新列中与待赋值的过渡变量相对应的列的权限
- 包含赋值语句的触发器所在的表格或视图的所有权
- DBADM 数据库权限,其中包含定义了包含赋值语句的触发器的表
- DATAACCESS 权限
- SYSADM 权限

声明中使用的任何表述均需获得授权。 更多信息,请参阅表达式。
权限设置:
权限集是软件包所有者拥有的权限。
VALUES INTO的语法
描述 VALUES INTO
- VALUES
- 引入由一个或多个列组成的单行。 如果指定了多个值,则必须将值列表括在括号内。
- 表达式
表达式是表达式中描述的任何表达式类型。 表达式不得包含列名。
- NULL
- 空值。 NULL 只能用于具有关联指示变量的宿主变量。
- INTO 目标变量或数组变量 [数组索引 ]
- 确定一个或多个输出值的目标。 INTO子句中的目标数量必须与要分配的值数量相等。 结果行中的第一个值分配给列表中的第一个目标,第二个值分配给第二个目标,以此类推。 在INTO子句中,目标变量不能被指定多次。 根据 " 赋值和比较 "中描述的规则,对目标的每次赋值都会在列表中依次进行。
如果目标数量少于结果列的值数量,则将值“W”分配给SQLCA的 SQLWARN3 字段。
如果任何赋值操作出错,则不会将值赋给目标,也不会再向指定目标赋值。 任何已分配的值将保持不变。
- global-variable-name
- 标识作为赋值目标的全球变量。
- 主机变量名
- 标识作为赋值目标的主变量。 对于LOB输出值,目标可以是常规的主变量(如果足够大)、LOB定位变量或LOB文件引用变量。
- SQL参数名称
- 标识作为赋值目标的参数。
- SQL变量名
- 标识作为赋值目标的SQL变量。 SQL变量在使用前必须声明。
过渡变量名
FL 500指定过渡表中要更新的列。 过渡变量名必须标识触发器主题表中的一列,该列可由相关名称限定,用于标识新值。
- 数组变量 [数组索引]
- 指定作为赋值目标的数组元素。
如果语句中也指定了公共表表达式 ,则不能将数组元素指定为赋值的目标。
- 数组变量
- 指定一个数组变量。
- [数组索引 ]
- 用于指定数组中哪个元素是赋值目标。
对于普通数组,数组索引表达式必须可转换为整数,且不能为空值。 索引值必须在1和数组定义的最大基数之间。
对于关联数组,数组索引表达式必须可转换为关联数组的索引数据类型,且不能为空值。
数组索引不能为:
- 引用当前日期、当前时间或当前时间戳特殊寄存器的表达式
- 非确定性函数
- 由外部动作定义的功能
- 用MODIFIES SQL DATA定义的功能
- 序列表达式
备注 VALUES INTO
- 目标分配:
INTO 子句标识的第 n 个目标与游标结果表的第 n 列相对应。 目标的数据类型必须与其对应的值相匹配。 如果数值,目标必须能够表示整个数值部分。 对于日期时间值,目标必须是字符串变量,其最小长度应符合日期时间值的字符串表示形式中定义的最小长度。 当要赋值的值为空时,必须为目标变量指定一个指示变量。
任务按列表顺序分配。 对目标的每个赋值都是根据 SQL 语言元素中描述的规则进行的。 如果目标数量少于该行中的值数量,则SQLCA的 SQLWARN3 字段将设置为“W”。 如果目标数量超过结果列的数量,则不会发出警告。 如果目标变量被赋值为空,则必须提供一个指示变量。 如果发生赋值错误,则不会将值赋给目标,也不会再向目标赋值。 任何已分配给目标的值仍保持分配状态。 然而,如果涉及LOB值,则可能修改了相应的目标,但变量内容不可预测。
如果同一赋值语句中包含多个赋值,则所有表达式将在执行赋值之前进行求值。 例如,在表达式中引用变量时,总是使用赋值语句中任何赋值之前的变量值。
通常,您使用LOB定位器来分配和检索LOB列中的数据。 然而,由于兼容性规则,您也可以使用LOB定位器将数据分配给具有其他数据类型的目标。 有关定位器的更多信息,请参阅 《使用LOB定位器操作LOB时节省存储空间 》。
- 默认编码方案:
- 数据的默认编码方案是绑定选项ENCODING中的值,即应用程序编码选项。 如果此语句与 LENGTH 或 SUBSTRING 等函数一起使用,且这些函数正在对 LOB 定位器进行操作,而定位器指定的 LOB 数据所采用的编码方案与 ENCODING 绑定选项不同,则会发生 LOB 物化和字符转换。 为避免LOB实体化和字符转换,请从 SYSIBM.SYSDUMMYA、 SYSIBM.SYSDUMMYE 或 SYSIBM.SYSDUMMYU 示例表中选取LOB数据。
例子 VALUES INTO
EXEC SQL VALUES(CURRENT PATH)
INTO :HV1; EXEC SQL VALUES(CURRENT MEMBER)
INTO :MEM; EXEC SQL VALUES (SUBSTR(:LOB1,1,35))
INTO :DETAILS; EXEC SQL SELECT SUBSTR(:LOB1,1,35)
INTO :DETAILS
FROM SYSIBM.SYSDUMMYU;VALUES INTVAR1 INTO MYINTARRAY1[INTCOL2+MYINTVAR+1];