CREATE TYPE(数组)
CREATE TYPE (array) 语句在当前服务器上定义数组类型。
调用
此语句可嵌入应用程序中或者以交互方式发出。 它是可以动态准备的可执行语句。
授权
此语句的授权标识所拥有的特权必须至少包括下列其中一项:
- 要在模式中创建的特权。 有关更多信息,请参阅 在模式中创建所需的特权。
- 数据库管理员权限
此语句的授权标识所拥有的特权必须至少包括下列其中一项:
- 对于 SYSTYPES 目录表:
- 对表的 INSERT 特权,以及
- 对模式 QSYS2 的 USAGE 特权
- 数据库管理员权限
如果指定了 SQL 名称,并且存在与创建数组类型的库同名的用户概要文件,并且该名称与语句的授权标识不同,那么该语句的授权标识所拥有的特权必须至少包含下列其中一项:
- 对具有该名称的用户概要文件的系统权限 *ADD
- 数据库管理员权限
有关对应于 SQL 特权的系统权限的信息,请参阅 检查对表或视图的特权时的对应系统权限。
语法
描述
- 数组类型名称
- 命名数组。 名称 (包括隐式或显式限定符) 不能与当前服务器上已存在的单值类型或数组类型相同。
如果指定了 SQL 名称,那么将在隐式或显式限定符指定的模式中创建数组类型。
如果指定了系统名称,那么将在限定符指定的模式中创建数组类型。 如果未限定:
- 如果 CURRENT SCHEMA 专用寄存器的值是 *LIBL ,那么将在当前库 (*CURLIB) 中创建数组类型。
- 否则,将在当前模式中创建数组类型。
如果数组类型名称不是有效的系统名称,Db2 for i 将生成一个系统名称。 有关生成名称的规则的信息,请参阅 表名称生成规则。
array-type-name 不能是内置数据类型的名称,也不能是以下任何系统保留的关键字,即使您将它们指定为定界标识也是如此。= < > >= <= <> ¬= ¬< ¬< != !< !> 全部 否 位置 XMLAGG 和 对于 RID XMLATTRIBUTES 任何 自 RRN XMLCOMMENT ARRAY_AGG HASHED_VALUE 选择 XMLCONCAT BETWEEN IN 类似 XMLDOCUMENT BOOLEAN 时间间隔 一些 XMLELEMENT CASE IS STRIP XMLFOREST 数据类型转换 LIKE 子串 XMLGROUP 检查 MATCH 表 XMLNAMESPACES DATAPARTITIONNAME NODENAME THEN XMLPARSE DATAPARTITIONNUM NODENUMBER TRIM XMLPI dbpartitionname 不 TRUE XMLROW DBPARTITIONNUM 空 类型 XMLSERIALIZE 相异 ONLY UNIQUE XMLTEXT EXCEPT OR 未知 XMLVALIDATE 存在 OVERLAPS WHEN XSLTRANSFORM EXTRACT 分区 如果指定了限定的 array-type-name ,那么模式名称不能是 QSYS , QSYS2, QTEMP 或 SYSIBM。
- 内置类型
- 指定用作数组所有元素的数据类型的内置数据类型。 有关每个内置数据类型的更完整描述,请参阅 CREATE TABLE 。
如果没有为具有长度,精度或小数位属性的数据类型指定特定值,那么将隐含语法图中显示的数据类型的缺省属性。
如果数组类型用于字符串数据类型,那么在创建数组类型时, CCSID 与数组类型相关联。 有关数据类型的更多信息,请参阅 CREATE TABLE。
- ARRAY [integer-constant] (整数常数
- 指定数组的最大基数为 integer-constant。 该值必须是大于 0 的正数。 如果未指定值,那么将使用最大整数值 2147483647。 可以在数组中分配的最大数组元素数是适合的元素数 (以 4 千兆字节为单位)。 每个可变长度, LOB 和 XML 数组元素都被分配为其最大长度。
注意
其他生成的函数: 创建函数以转换为数组类型,但未创建服务程序,因此您无法授予或撤销对这些函数的特权。
生成的强制类型转换函数的名称: 其中一个强制类型转换函数 ARRAY 的非限定名称。 转换为数组类型的强制类型转换函数的名称是数组类型的名称。 强制类型转换函数的输入参数具有与 ARRAY 相同的数据类型。
例如,假定使用以下语句创建名为 T_SHOESIZE 的数组类型:
CREATE TYPE CLAIRE.T_SHOESIZES AS INT ARRAY[]执行该语句时,数据库管理器还会生成以下强制类型转换函数。 ARRAY 从数组类型转换为数组, T_SHOESIZE 从数组转换为数组类型。
无法显式删除生成的强制类型转换函数。 当使用 DROP 语句删除数组类型时,将隐式删除为数组类型生成的强制类型转换函数。
数组类型属性: 数组类型创建为 *SQLUDT 对象。
数组类型所有权: 如果指定了 SQL 名称:
- 如果存在与创建数组类型的模式同名的用户概要文件,那么该数组类型的 所有者 就是该用户概要文件。
- 否则,数组类型的 owner 是执行该语句的 thread 的用户概要文件或组用户概要文件。
如果指定了系统名称,那么数组类型的 owner 是执行该语句的 thread 的用户概要文件或组用户概要文件。
数组类型权限: 如果使用 SQL 名称,那么将在 *PUBLIC 上使用系统权限 *EXCLUDE 创建数组类型。 如果使用系统名称,那么将使用模式的创建权限 (CRTAUT) 参数所确定的 *PUBLIC 权限来创建数组类型。
如果数组类型的所有者是组概要文件 (GRPPRF 关键字) 的成员,并且指定了组权限 (GRPAUT 关键字) ,那么该组概要文件也将具有该数组类型的权限。
示例
示例 1: 创建一个名为 PHONENUMBERS 的数组类型,其中最多有 $TAG4 个元素属于 DECIMAL (10, 0) 数据类型。
CREATE TYPE PHONENUMBERS AS DECIMAL(10,0) ARRAY[5] 示例 2: 在模式 GENERIC 中创建名为 NUMBER 的数组类型,其最大元素数未知。
CREATE TYPE GENERIC.NUMBERS
AS BIGINT ARRAY[]