VALUES INTO 语句

VALUES INTO语句为变量赋值。

调用 VALUES INTO

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

授权 VALUES INTO

授权声明的授权ID所包含的特权必须至少包括以下一项特权或授权:
  • 语句中确定的每个表和视图的 SELECT 权限
  • 声明中确定的每张桌子和每处景观的所有权
  • 对语句中标识的任何全局变量具有读和写权限
  • 对声明中确定的任何全局变量的所有权
  • DBADM 数据库权限(仅限表格)
  • DATAACCESS 权限
  • SYSADM 权限
  • SYSCTRL权限(仅限目录表)

更改开始对于赋值给全局变量或数组元素的全局变量,权限集必须至少包含以下内容之一:更改结束

更改开始
  • 可变WRITE权限
  • 可变的所有权
  • DATAACCESS 权限
  • SYSADM 权限
更改结束

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

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

声明中使用的任何表述均需获得授权。 更多信息,请参阅表达式

更改开始权限设置:更改结束

更改开始权限集是软件包所有者拥有的权限。更改结束

VALUES INTO的语法

阅读语法图跳过可视化语法图 VALUES 表达式NULL(,表达式NULL) INTO ,目标变量数组变量[数组索引]1
目标变量
阅读语法图跳过可视化语法图全局变量名主机变量名SQL参数名称SQL变量名过渡变量名
注意:
  • 1 等号右侧的源值规格 (表达式、NULL 或 DEFAULT)的数量必须与语句左侧的目标规格数量一致。

描述 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

示例1 :将特殊寄存器CURRENT PATH的值赋给宿主变量 HV1
   EXEC SQL VALUES(CURRENT PATH)
            INTO :HV1;
示例2 :将特殊寄存器CURRENT MEMBER的值赋给宿主变量 MEM
   EXEC SQL VALUES(CURRENT MEMBER)
            INTO :MEM;
示例3 :假设LOB定位器 LOB1 与一个CLOB值相关联。 使用LOB定位器将CLOB值的一部分分配给宿主变量 DETAILS
   EXEC SQL VALUES (SUBSTR(:LOB1,1,35))
            INTO :DETAILS;
如果LOB定位器指定的LOB数据 LOB1 的编码方案与编码绑定选项的值不同,并且您希望避免LOB实体化和字符转换,请使用以下语句代替VALUES INTO语句:
   EXEC SQL SELECT SUBSTR(:LOB1,1,35)
            INTO :DETAILS
            FROM SYSIBM.SYSDUMMYU;
示例4 :使用VALUES INTO语句,将 INTVAR1 的值检索到数组 MYINTARRAY1 中的一个元素中,该元素由表达式 INTCOL2+MYINTVAR+1 的值索引。
VALUES INTVAR1 INTO MYINTARRAY1[INTCOL2+MYINTVAR+1];