CREATE TYPE(数组)语句

CREATE TYPE (array) 语句定义数组类型。 数组类型的元素基于其中一种内置数据类型或用户定义的单值类型。

调用

此语句可以嵌入在应用程序中,也可通过动态 SQL 语句来发出。 它是一个可执行语句,仅当 DYNAMICRULES 运行行为对于程序包有效时才能动态编译 (SQLSTATE 42509)。

授权

语句授权标识所拥有的特权必须至少包括下列其中一项权限:
  • 数据库上的 IMPLICIT_SCHEMA 权限 (如果数组类型的模式名称未引用现有模式)
  • CREATEIN 对模式的特权 (如果数组类型的模式名称引用现有模式)
  • 对模式的 SCHEMAADM 权限 (如果数组类型的模式名称引用现有模式)
  • DBADM 权限

语法

Read syntax diagramSkip visual syntax diagramCREATE OR REPLACE TYPEtype-nameASdata-type ARRAY[2147483647integer-constantdata-type2]
data-type
Read syntax diagramSkip visual syntax diagrambuilt-in-typeanchored-data-typerow-type-namearray-type-name
data-type2
Read syntax diagramSkip visual syntax diagram INTEGERINTVARCHARCHARACTERCHARVARYING(integerOCTETSCODEUNITS32)anchored-non-row-data-type
anchored-data-type
Read syntax diagramSkip visual syntax diagramANCHORDATA TYPE TO variable-nametable-name.column-nameROWOFtable-nameview-namecursor-variable-name
built-in-type
Read syntax diagramSkip visual syntax diagramSMALLINTINTEGERINTBIGINTDECIMALDECNUMERICNUM(5,0)( integer,0, integer)FLOAT(53)( integer)REALDOUBLEPRECISIONCHARACTERCHAR(1)( integerOCTETSCODEUNITS32)VARCHARCHARACTERCHARVARYING( integerOCTETSCODEUNITS32)FOR BIT DATA1CLOBCHARACTERCHARLARGE OBJECT(1M)( integerKMGOCTETSCODEUNITS32)GRAPHIC(1)( integerCODEUNITS16CODEUNITS32)VARGRAPHIC( integerCODEUNITS16CODEUNITS32)DBCLOB(1M)( integerKMGCODEUNITS16CODEUNITS32)NCHARNATIONALCHARCHARACTER(1)( integer)NVARCHARNCHAR VARYINGNATIONALCHARCHARACTERVARYING( integer)NCLOBNCHAR LARGE OBJECTNATIONAL CHARACTER LARGE OBJECT(1M)( integerKMG)BINARY(1)( integer)VARBINARYBINARY VARYING(integer)BLOBBINARY LARGE OBJECT(1M)( integerKMG)DATETIMETIMESTAMP(6)( integer)BOOLEAN
anchored-non-row-data-type
Read syntax diagramSkip visual syntax diagramANCHORDATA TYPETO variable-nametable-name.column-name
Notes:
  • 1 The FOR BIT DATA clause can be specified in any order with the other column constraints that follow. The FOR BIT DATA clause cannot be specified with string units CODEUNITS32 (SQLSTATE 42613).

描述

OR REPLACE
指定替换当前服务器上存在的数据类型的定义。 在目录中替换新定义之前,有效删除现有定义,但当函数和方法具有参数或使用要替换的数据类型定义的返回值时,这些函数和方法将失效。 现有定义不能是结构化类型 (SQLSTATE 42809)。 如果数据类型的定义在当前服务器上不存在,那么忽略此选项。
类型名称
命名类型。 该名称(包括隐式或显式限定符)不得标识当前服务器上已存在的任何其他类型(内置或用户定义)。 非限定名不能与内置数据类型或 VARBINARY (SQLSTATE 42918) 的名称相同。

在谓词中用作关键字的多个名称保留供系统使用,不能用作 type-name (SQLSTATE 42939)。 名称包含 SOME、ANY、ALL、NOT、AND、OR、BETWEEN、NULL、LIKE、EXISTS、IN、UNIQUE、OVERLAPS、SIMILAR、MATCH 和比较运算符。

如果指定了两部分 type-name ,那么模式名称不得以字符 "SYS" 开头 (SQLSTATE 42939)。

data-type
指定数组元素的数据类型。
内置类型
指定内置数据类型。 请参阅 "CREATE TABLE" 以获取内置数据类型的描述。 内置类型包括 CREATE TABLE中描述的数据类型,而不是 引用 SYSPROC.DB2SECURITYLABEL, XML 或用户定义的类型 (SQLSTATE 429C2)。
row-type-name
指定 用户定义的 行类型的名称。 如果指定的 row-type-name 没有模式名称,那么将通过在 SQL 路径中搜索模式来解析 row-type-name行类型可以作为元素嵌套在其他数组类型中,最大嵌套级别为 16。
array-type-name
指定数组类型。 如果指定的 array-type-name 没有模式名称,那么将通过在 SQL 路径中搜索模式来解析 array-type-name 。 数组类型可以作为元素嵌套在其他数组类型中,最大嵌套级别为 16。
anchored-data-type
标识用于确定数据类型的另一个对象。 锚点对象的数据类型受直接指定数据类型时适用的相同限制约束,如果是行,那么将创建行类型。
ANCHOR DATA TYPE TO
指示使用锚点数据类型来指定数据类型。
variable-name
标识全局变量。 全局变量的数据类型用作数组元素的数据类型。
table-name.column-name
标识现有表或视图的列名。 列的数据类型用作数组元素的数据类型。
ROW OF table-nameview-name
指定具有名称和数据类型的字段行,这些字段基于由 table-name 标识的表或由 view-name标识的视图的列名和列数据类型。数组元素的数据类型为未命名的行类型。
ROW OF 游标变量名
指定 具有 名称和数据类型 的字段行, 基于 cursor-variable-name标识的游标变量的字段名称和字段数据类型。 指定的游标变量必须是 下列其中一个元素 (SQLSTATE 428HS):
  • 具有强类型游标数据类型的全局变量
  • 具有弱类型游标数据类型的全局变量,该数据类型是通过使用 CONSTANT 子句指定已命名所有结果列的 select-statement 来创建或声明。
如果游标变量的游标类型不是使用 指定行类型强类型,那么数组元素的 数据类型 是未命名的 类型。
anchored-non-row-data-type
标识用于确定数据类型的另一个对象。 锚点对象的数据类型受直接指定数据类型时适用的相同限制约束。
ANCHOR DATA TYPE TO
指示使用锚点数据类型来指定数据类型。
variable-name
标识数据类型为 INTEGER 或 VARCHAR 数据类型的全局变量。 全局变量的数据类型用作数组下标的数据类型。
table-name.column-name
标识数据类型为 INTEGER 或 VARCHAR 数据类型的现有表或视图的列名。 列的数据类型用作数组下标的数据类型。
数组 [ 整型常数 ]
指定类型是最大基数为 integer-constant的数组。 该值必须是正整数 (非零) 且小于最大正整数值 (SQLSTATE 42820)。 缺省值为最大正整数值 (2 147 483 647)。 数组值的基数由分配给数组值的最高元素位置确定。

给定系统上阵列的最大基数受可用于数据库应用程序的内存总量的限制。 因此,虽然可以创建大基数的数组,但并非所有元素都可供使用。

ARRAY [data-type2]
指定类型是使用数据类型 data-type2的值建立索引的关联数组。 数据类型必须是 INTEGER 或 VARCHAR 数据类型 (SQLSTATE 429C2)。 在指定数组元素时指定为下标的值必须可指定为 data-type2的值。 数组值的基数由分配数组元素时使用的唯一索引值数确定。

规则

  • 使用锚定数据类型:锚定数据类型不能引用以下对象 (SQLSTATE 428HS):昵称、类型化表、类型化视图、与基于表达式的索引关联的统计视图、声明的临时表、与弱类型游标关联的行定义、具有与数据库代码页或数据库排序规则不同的代码页或排序规则的对象。

注意

  • 数组类型用法: 数组类型只能用作以下数据类型:
    • 复合 SQL(编译型)语句中的局部变量
    • SQL 例程的参数
    • Java™ 过程的参数 (仅非嵌套普通数组)
    • SQL 函数的返回类型
    • 全局变量
  • 具有数组类型的变量或参数 defined 只能在复合 SQL (编译型) 语句中使用

示例

示例 1: 创建名为 PHONENUMBERS 的数组类型,其中最多有 50 个元素属于 DECIMAL (10 , 0) 数据类型。
   CREATE TYPE PHONENUMBERS AS DECIMAL(10,0)
     ARRAY[50]
示例 2: 使用 模式 GENERIC 中的缺省 元素数创建名为 NUMBER 的数组类型。
   CREATE TYPE GENERIC.NUMBERS AS DECFLOAT(34)
     ARRAY[]
示例 3: 使用 DECIMAL (16 , 0) 元素创建名为 PERSONAL_PHONENUMBERS关联 数组,这些元素由诸如 "Home" , "Work" 或 "妈妈"之类的字符串建立索引。
   CREATE TYPE PERSONALPHONENUMBERS AS DECIMAL(16, 0) ARRAY[VARCHAR(8)]
示例 4: 创建关联数组类型,其中索引为省/自治区/直辖市,地域或国家或地区 名称,元素为首都:
   CREATE TYPE CAPITALSARRAY AS VARCHAR(30) ARRAY[VARCHAR(20)]
示例 5: 为长度最多为 40 个字符的产品描述创建关联数组类型,其中索引是最大长度为 12 个字符的产品编号:
   CREATE TYPE PRODUCTS AS VARCHAR(40) ARRAY[VARCHAR(12)]