DECLARE VARIABLE 语句

DECLARE VARIABLE 语句为主变量和变量的子类型定义 CCSID。 当它出现在应用程序中时,DECLARE VARIABLE语句会导致 Db2 预编译器使用特定的CCSID标记一个主机变量。 当宿主变量出现在SQL语句中时, Db2 预编译器会将此CCSID放入为SQL语句生成的结构中。

调用 DECLARE VARIABLE

此语句只能嵌入在应用程序中。 这不是一个可执行语句。

授权 DECLARE VARIABLE

不需要执行任何操作。

语法 DECLARE VARIABLE

阅读语法图跳过可视化语法图DECLARE, 宿主变量VARIABLECCSID EBCDICCCSID ASCIICCSID UNICODEFOR SBCS DATAFOR MIXED DATAFOR BIT DATACCSID常数

描述 DECLARE VARIABLE

主机变量
标识程序中定义的字符串或图形字符串宿主变量。 不能为主变量指定指示变量。
CCSID ASCII、EBCDIC 或 UNICODE
指定应使用服务器指定编码方案的相应默认CCSID。
CCSID ASCII
指定服务器上变量类型的默认 ASCII CCSID 应被使用。
CCSID EBCDIC
指定服务器上变量的类型应使用默认的EBCDIC CCSID。 如果未指定此选项,则默认使用CCSID EBCDIC。
CCSID UNICODE
指定服务器上变量的类型应使用默认的UNICODE CCSID。
用于SBCS数据、混合数据或位数据
指定变量宿主变量中包含的数据类型。 在声明图形宿主变量时,不能指定 FOR 子句。

对于ASCII或EBCDIC数据,如果在声明字符宿主变量时未指定此子句,则默认值为“对于SBCS数据”,前提是安装面板DSNTIPF上的“混合数据”=“否”。 如果安装面板 DSNTIPF 上的 MIXED DATA = YES,则默认值为 FOR MIXED DATA。

对于UNICODE数据,无论安装面板DSNTIPF上的MIXED DATA设置如何,默认值始终为FOR MIXED DATA。

用于 SBCS 数据
指定主机变量的值只能包含SBCS(单字节字符集)数据。
用于混合数据
指定主机变量的值可以包含SBCS数据和DBCS数据。
FOR BIT DATA
指定主机变量的值与编码字符集无关,因此永远不会转换。 FOR BIT DATA 主机变量的 CCSID 为 65535。
CCSID 整数常量
指定主机变量的值包含使用CCSID 整数常量编码的数据。 如果整数是SBCS CCSID,则主机变量是SBCS数据。 如果整数是混合数据CCSID,则主机变量是混合数据。 对于字符宿主变量,指定的 CCSID 必须是 SBCS、混合 CCSID 或 UNICODE ( UTF-8 ) CCSID。 对于图形宿主变量,指定的 CCSID 必须是 DBCS 或 UNICODE ( UTF-16 ) CCSID。 整数的有效取值范围为1-65533。

备注 DECLARE VARIABLE

语句的位置 :DECLARE VARIABLE语句可以在应用程序中的任何位置指定,SQL语句在应用程序中有效,但以下情况除外。 DECLARE VARIABLE语句必须出现在引用DECLARE VARIABLE语句中指定的主变量SQL语句之前。

EXECUTE IMMEDIATE或PREPARE的CCSID例外 :当主机变量出现在SQL语句中时, Db2 预编译器会将相应的数字CCSID放入为SQL语句生成的结构中。 除了EXECUTE IMMEDIATE或PREPARE语句之外,任何SQL语句都会发生CCSID的这种放置。 CCSID的放置也适用于EXECUTE IMMEDIATE或PREPARE语句中的宿主变量 ,但不适用于EXECUTE IMMEDIATE或PREPARE语句中字符串表达式中的变量。

如果 PL/1 应用程序包含至少一个DECLARE VARIABLE语句,则任何EXECUTE IMMEDIATE或PREPARE语句中的字符串表达式都不能以冒号开头。 由变量名和冒号组成的表达式被解释为主变量

特定主机语言 :如果在汇编源程序中使用 DECLARE VARIABLE 语句,则不能使用 ONEPASS SQL 处理选项。 如果C、C++或PL/I源程序中使用DECLARE VARIABLE语句,则必须使用TWOPASS SQL处理选项。 对于这些语言或COBOL,宿主变量的定义可以放在引用该变量的DECLARE VARIABLE语句之前或之后。 如果FORTRAN源程序中使用DECLARE VARIABLE语句,则主机变量定义必须放在DECLARE VARIABLE语句之前。

示例 DECLARE VARIABLE

示例 :使用PL/I数据类型定义以下主机变量:FRED为固定长度的位数据,JEAN为固定长度的 UTF-8 (混合)数据,DAVE为可变长度的 UTF-8 (混合)数据,PETE为固定长度的图形 UTF-16 数据,AMBER为可变长度的图形 UTF-16 数据。

使用 DECLARE VARIABLE 语句为这些主机变量指定数据子类型或 CCSID:FRED 作为 CCSID EBCDIC,JEAN 作为 CCSID 1208 或 CCSID UNICODE,DAVE 作为 CCSID 1208 或 CCSID UNICODE,PETE 作为 CCSID 1200 或 CCSID UNICODE,AMBER 作为 CCSID 1200 或 CCSID UNICODE。
        EXEC SQL BEGIN DECLARE SECTION;
           DCL FRED CHAR(10);
               EXEC SQL DECLARE :FRED VARIABLE CCSID EBCDIC FOR BIT DATA;
           DCL JEAN CHAR(30);
               EXEC SQL DECLARE :JEAN VARIABLE CCSID 1208;
           DCL DAVE CHAR(9) VARYING;
               EXEC SQL DECLARE :DAVE VARIABLE CCSID UNICODE; 
           DCL PETE GRAPHIC(10);
               EXEC SQL DECLARE :PETE VARIABLE CCSID 1200;
           DCL AMBER GRAPHIC(20) VARYING;
               EXEC SQL DECLARE :AMBER VARIABLE CCSID UNICODE;
        EXEC SQL END DECLARE SECTION;