DECLARE VARIABLE 语句
DECLARE VARIABLE 语句为主变量和变量的子类型定义 CCSID。 当它出现在应用程序中时,DECLARE VARIABLE语句会导致 Db2 预编译器使用特定的CCSID标记一个主机变量。 当宿主变量出现在SQL语句中时, Db2 预编译器会将此CCSID放入为SQL语句生成的结构中。
调用 DECLARE VARIABLE
此语句只能嵌入在应用程序中。 这不是一个可执行语句。
授权 DECLARE VARIABLE
不需要执行任何操作。
语法 DECLARE VARIABLE
描述 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 数据。
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;