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 变量名数据类型DEFAULT NULLDEFAULTconstantspecial-register

数据类型:

阅读语法图跳过可视化语法图built-in-type数组类型名称

内置类型:

阅读语法图跳过可视化语法图SMALLINTINTEGERINTBIGINTDECIMALDECNUMERIC(5,0)( 整数整数)FLOAT(53)( 整数)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1)( 整数)CHARACTERCHARVARYINGVARCHAR( 整数)FORSBCSMIXEDBITDATACHARACTERCHARLARGE OBJECTCLOB(1M)( 整数KMG)FORSBCSMIXEDDATAGRAPHIC(1)( 整数)VARGRAPHIC(整数)DBCLOB(1M)( 整数KMG)BINARY(1)( 整数)BINARY VARYINGVARBINARY( 整数)BINARY LARGE OBJECTBLOB(1M)( 整数KMG)DATETIMETIMESTAMP(6)(整数)WITHOUT TIME ZONEWITH TIME ZONE

描述 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;
更改结束