CREATE VARIABLE 语句
CREATE VARIABLE 语句在当前服务器上创建一个全局变量。
调用 CREATE VARIABLE
此语句可嵌入应用程序中或者以交互方式发出。 这是一个可执行语句,只有在DYNAMICRULES RUN行为生效时才能动态准备。 更多信息,请参阅授权ID和动态SQL。
授权 CREATE VARIABLE
以下定义的特权套装必须至少包含以下一项:
- 模式中的CREATEIN特权
- 系统 DBADM 权限
- SYSADM 权限
- SYSCTRL 权限
安装 SYSOPR 权限(当前进程的 SQLID 设置为 SYSINSTL 时)
权限设置:
与模式名称相匹配的授权 ID 隐含地拥有模式的 CREATEIN 权限。 如果语句嵌入在应用程序中,则权限集是指程序包所有者所拥有的一组权限。 如果所有者是一个角色,则隐式模式不适用,该角色需要包含前面列出的特权或权限之一。
如果语句是动态准备的,则权限集是指进程的 SQL 授权 ID 所拥有的权限,除非该进程处于可信上下文中且 ROLE AS OBJECT OWNER AND QUALIFIER 子句生效。 如果架构名称与进程的SQL授权ID不同,则必须满足以下条件之一:
- 特权集包括SYSADM或SYSCTRL权限。
- 该进程的SQL授权ID对模式具有CREATEIN权限。
当“作为对象所有者和限定者的角色”子句生效时,特权集是指角色所拥有的特权集。 如果模式名称与角色不匹配,则必须满足以下条件之一:
- 特权集包括SYSADM或SYSCTRL权限。
- 此角色在架构中具有CREATEIN权限。
CREATE VARIABLE的语法
数据类型:
内置类型:
描述 CREATE VARIABLE
- variable-name
- 命名全局变量。 名称(包括隐式或显式限定符)不得标识当前服务器上存在的全局变量。 如果未指定限定符,则使用当前模式特殊寄存器的内容。
除非模式名称为 "SYSADM",否则模式名称不得以 "SYS "开头。
- data-type
- 指定全局变量的数据类型。
- 内置式
- FL 500 全局变量的数据类型是内置类型。 有关数据类型的信息,请参阅内置类型。 数据类型不能是ROWID或XML。
数组类型名称
FL 500指定用户定义的数组类型名称。 变量是一个用 CREATE TYPE语句(数组类型) 定义的数组。如果您指定了数组类型名称而没有模式名称, Db2 将通过在SQL路径中搜索模式来解析数组类型。
元素定义为字符串的数组类型必须使用CCSID UNICODE定义。

- DEFAULT、DEFAULT NULL、DEFAULT constant 或 DEFAULT special-register
- 如果未明确指定值,则默认值将分配给全局变量。 在会话中首次引用全局变量时为其指定一个值。 默认值根据第一个参考值确定。 如果没有指定默认值,则全局变量的默认值为空值。
如果指定了数组类型名称 ,则只能明确指定 DEFAULT NULL。
- 默认值:空
- 将全局变量的默认值指定为空。 全局变量的值始终可以为空。
- 默认常量
- 指定常量的值作为全局变量的默认值。 常数的值必须符合全局变量的赋值规则。 常数不能是NAN、SNAN或INFINITY中的任何一个。
- 默认特殊注册
- 指定全局变量实例化时,特殊寄存器的值将作为全局变量的默认值。 指定特殊寄存器的值必须符合为全局变量赋值的规则。 不得填写以下特殊登记:
- CURRENT GET_ACCEL_ARCHIVE
- 当前查询_加速度
- CURRENT TEMPORAL BUSINESS_TIME
- CURRENT TEMPORAL SYSTEM_TIME
备注 CREATE VARIABLE
- 会话范围:
- 全局变量具有会话范围。 虽然它们可用于当前服务器上所有处于活动状态的会话,但全局变量的值对于每个会话都是私有的。
- 全局变量值的修改:
全局变量不受事务控制。 对全局变量值的修改不受 COMMIT 或 ROLLBACK 语句的影响。
- 使用全局变量的特权:
- 读取或写入全局变量需要授权ID或角色对全局变量具有适当的权限。 变量所有者被隐式授予对变量的所有权限。
- 设置默认值:
- 全局变量创建后,在给定范围内首次引用时,会将其实例化为默认值。 如果一个语句中引用了一个全局变量,则该变量的实例化与该语句的执行无关。
- 使用新创建的全局变量:
- 如果一个全局变量是在一个会话中创建的,那么在其他会话中就无法使用,直到工作单元提交。 然而,新创建的全局变量可以在创建它的会话中,在工作单元提交之前使用。
例子 CREATE VARIABLE
示例1 :创建一个全局变量,用于指示会话中使用的打印机。
CREATE VARIABLE MYSCHEMA.MYJOB_PRINTER VARCHAR(30)
DEFAULT 'Default printer'; 示例2 :创建一个全局变量,用于指示员工所在的部门。
CREATE VARIABLE SCHEMA1.GV_DEPTNO INTEGER
DEFAULT 'Unassigned';
例 3: 将用户定义的数组类型 myArrayIntType 创建为整数数组。 创建全局变量 myGlobalVar ,类型为 myArrayIntType。

CREATE TYPE myArrayIntType AS INT ARRAY[];
CREATE VARIABLE myGlobalVar myArrayIntType;
