CREATE TYPE(行)语句

CREATE TYPE (row) 语句定义行类型。 行类型包括一个或多个具有关联数据类型的字段,这些数据类型构成数据行。

调用

此语句可嵌入应用程序中或者以交互方式发出。 它是可动态准备的可执行语句。

授权

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

语法

Read syntax diagramSkip visual syntax diagramCREATE OR REPLACE TYPEtype-nameAS ROW(,field-definition )anchored-row-data-type
field-definition
Read syntax diagramSkip visual syntax diagramfield-namedata-type
data-type
Read syntax diagramSkip visual syntax diagrambuilt-in-typeanchored-non-row-data-typeanchored-row-data-typerow-type-namearray-type-namedistinct-type-name
built-in-type
Read syntax diagramSkip visual syntax diagramSMALLINTINTEGERINTBIGINTDECIMALDECNUMERICNUM(5,0)( integer,0, integer)FLOAT(53)( integer)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1 BYTE)( 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 TYPE TO variable-nametable-name.column-name
anchored-row-data-type
Read syntax diagramSkip visual syntax diagramANCHORDATA TYPE TO variable-nameROWOFtable-nameview-namecursor-variable-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)。 如果数据类型的定义在当前服务器上不存在,那么忽略此选项。
类型名称
命名类型。 名称 (包括隐式或显式限定符) 无法标识目录中已描述的任何其他类型 (内置,结构化,数组,行或单值)。 非限定名不能与内置数据类型的名称相同 (SQLSTATE 42918)。

在谓词中用作关键字的多个名称保留供系统使用,不能用作类型名称 (SQLSTATE 42939)。 这些名称是 SOME , ANY , ALL , NOT , AND , OR , BETWEEN , NULL , LIKE , EXISTS , IN , UNIQUE ,交叠, LIKE , MATCH 和比较运算符。

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

字段定义
定义行类型的字段。
field-name
指定行类型中字段的名称。 该名称不能与此行类型的任何其他字段相同 (SQLSTATE 42711)。
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 的行类型的字段类型。
distinct-type-name
指定用户定义的单值数据类型。 指定的单值类型不能具有任何数据类型约束 (SQLSTATE 429C5)。
anchored-non-row-data-type
标识用于确定数据类型的另一个对象。 锚点对象的数据类型具有直接指定数据类型时适用的相同限制。
ANCHOR DATA TYPE TO
指示使用锚点数据类型来指定数据类型。
variable-name
标识数据类型为受支持行字段数据类型的全局变量。 全局变量的数据类型用作字段的数据类型。
table-name.column-name
标识数据类型为内置类型或单值类型的现有表或视图的列名。 列的数据类型用作字段的数据类型。
anchored-row-data-type
标识要用作行的字段的另一对象中的行信息。
ANCHOR DATA TYPE TO
指示使用锚定数据类型来指定数据类型。
variable-name
标识全局变量。 所引用变量的数据类型必须是行类型。
ROW OF table-nameview-name
根据 table-name 标识的表的列名和列数据类型或 view-name标识的视图,指定具有名称和数据类型的字段行。 锚点对象列的数据类型具有应用于字段数据类型的相同限制。
ROW OF 游标变量名
指定名称和数据类型的字段,这些字段基于 cursor-variable-name 标识的游标变量的字段名和字段数据类型。 指定的游标变量必须是下列其中一个对象 (SQLSTATE 428HS):
  • 具有强类型游标数据类型的全局变量
  • 具有弱类型游标数据类型的全局变量,该数据类型是通过使用 CONSTANT 子句指定已命名所有结果列的 select-statement 来创建或声明。

规则

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

注意

  • 行类型用法: 行类型只能用作以下数据类型:
    • 复合 SQL(编译型)语句中的局部变量
    • SQL 例程的参数
    • SQL 函数的返回类型
    • 数组类型的元素
    • 用户定义的 游标类型
    • 全局变量
  • 具有行类型的变量或参数 defined 只能在复合 SQL (编译型) 语句中使用

示例

  • 根据 DEPARTMENT 表的列创建行类型。
    CREATE TYPE DEPTROW AS ROW (DEPTNO   VARCHAR(3),
                                DEPTNAME VARCHAR(29),
                                MGRNO    CHAR(6),
                                ADMRDEPT CHAR(3),
                                LOCATION CHAR(16))