DECLARE TABLE 语句

DECLARE TABLE语句用于应用程序文档。 它还为预编译器提供用于检查嵌入式SQL语句的信息。 (DCLGEN子命令可用于为任何可访问的 Db2 目录中描述的表和视图生成声明。

有关 DCLGEN 的更多信息,请参阅 “声明表和视图定义 ”和 “DCLGEN(声明生成器)子命令(DSN)

调用 DECLARE TABLE

此语句只能嵌入在应用程序中。 这不是一个可执行语句。

授权 DECLARE TABLE

不需要执行任何操作。

语法 DECLARE TABLE

阅读语法图跳过可视化语法图DECLARE table-name视图名称 TABLE(,列名built-in-type独特类型名称NOT NULLNOT NULL WITH DEFAULT)

内置类型:

阅读语法图跳过可视化语法图SMALLINTINTEGERINTBIGINTDECIMALDECNUMERIC(5,0)( 整数整数)FLOAT(53)( 整数)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1)( 整数)CHARACTERCHARVARYINGVARCHAR( 整数)CHARACTERCHARLARGE OBJECTCLOB(1M)( 整数KMG)GRAPHIC(1)( 整数)VARGRAPHIC(整数)DBCLOB(1M)( 整数KMG)BINARY(1)( 整数)BINARY VARYINGVARBINARY( 整数)BINARY LARGE OBJECTBLOB(1M)( 整数KMG)DATETIMETIMESTAMPROWIDXML

描述 DECLARE TABLE

表名 视图名
指定要记录的表或视图的名称。 如果您的应用程序中定义了表,则定义表的 SQL 语句(例如 CREATE TABLE 或 DECLARE GLOBAL TEMPORARY TABLE 语句)中的表描述必须与 DECLARE TABLE 语句中的描述完全相同。
列名
指定表或视图的列名。

预编译器使用这些名称来检查 SQL 语句中名称的一致性。 它还使用数据类型来检查 SQL 语句中名称和数据类型的一致性。

内置式
指定列的内置数据类型。 使用内置数据类型之一。
SMALLINT
对于一个小整数。
INTEGER 或 INT
对于整数。
BIGINT
对于一个大整数。
DECIMAL (integer,integer ) 或 DEC (integer,integer )
DECIMAL(integer ) 或 DEC(integer )
小数点或DEC
对于十进制数。 第一个整数是数字的精度。 即数字的总和,范围是1-31。 第二个整数是数字的刻度。 即小数点右边的位数,范围从0到数字的精确度。

您可以将 DECIMAL(p) 用于 DECIMAL(p,0 ),将 DECIMAL 用于 DECIMAL(5,0)。

您也可以使用 NUMERIC 代替 DECIMAL。 例如,NUMERIC(8)与DECIMAL(8)等效。 与DECIMAL不同,NUMERIC不允许缩写。

FLOAT(integer)
FLOAT
浮点数。 如果整数在1到21(含)之间,则格式为单精度浮点。 如果整数在22到53之间(包括22和53),则格式为双精度浮点。

您可以使用DOUBLE PRECISION或FLOAT来表示FLOAT(53)。

REAL
用于单精度浮点。
DOUBLE或DOUBLE PRECISION
用于双精度浮点运算
DECFLOAT (整数
对于十进制浮点数。 整数的值必须为16或34,表示可存储的有效数字位数。 如果省略整数 ,DECFLOAT列将能够表示34位有效数字。
CHARACTER( 整数 ) 或 CHAR( 整数 )
性格或品格
对于长度为整数的固定长度字符串,其范围是1-255。 如果省略长度说明,则默认长度为1个字符。
更改开始CCSID 1208更改结束
更改开始FL 500 指定该列是编码为 UTF-8 的 Unicode 列。 对于ASCII或Unicode表,不得指定此条款。更改结束
VARCHAR( 整数 ) CHAR VARYING( 整数 ) 或 CHARACTER VARYING( 整数 )
对于长度可变的字符串,最大长度为整数 ,范围从1到最大记录大小减去10个字节。 请参阅表5 ,确定最大记录大小。
CCSID 1208
指定该列是编码为 UTF-8 的Unicode列。 对于ASCII或Unicode表,不得指定此条款。
CLOB( 整数 [K|M|G])、CHAR LARGE OBJECT( 整数 [K|M|G])或 CHARACTER LARGE OBJECT( 整数 [K|M|G])
CLOB,CHAR LARGE OBJECT,或CHARACTER LARGE OBJECT
指定最大字节数目的字符串(CLOB)。 最大长度必须在1-2147483647之间。 CLOB列的长度可变。 在某些语境下,无论其长度如何,都不能引用。 更多信息,请参阅 LOB使用限制
当未指定整数时,默认长度为 1M。 可以为整数指定的最大值取决于是否也指定了单位指示符,如下表所示。
整数
整数的最大值为2147483647。 字符串的最大长度为整数
整数 K
整数的最大值为2097152。 最大长度为1024倍整数
整数 M
整数的最大值为2048。 最大长度为1,048,576倍整数
数 G
整数的最大值为2。 最大长度为1,073,741,824次整数

整数可以与K、M或G用0个或更多空格隔开。

如果您指定的值为2千兆字节(2,147,483,648), Db2 将使用少一个字节的值,即2147483647。

更改开始CCSID 1208更改结束
更改开始FL 500 指定该列是编码为 UTF-8 的 Unicode 列。 对于ASCII或Unicode表,不得指定此条款。更改结束
图形 (整数
GRAPHIC
对于长度为整数的固定长度图形字符串,其范围是1-127。 如果省略长度说明,则默认长度为1个字符。更改开始
CCSID 1200
FL 500 指定该列是编码为 UTF-16 的 Unicode 列。 对于ASCII或Unicode表,不得指定此条款。
更改结束
VARGRAPHIC (整数
对于长度为最大整数长度且长度介于1到 n/2 之间的可变图形字符串,其中 n 是最大行数减去2个字节。
CCSID 1200
指定该列是 UTF-16 编码的Unicode列。 对于ASCII或Unicode表,不得指定此条款。
DBCLOB (整数 [K|M|G])
DBCLOB
对于双字节字符大对象(DBCLOB)字符串,其最大长度为双字节字符。 最大长度必须在1-1,073,741,823之间。 DBCLOB列的长度可变。 在某些语境下,无论其长度如何,都不能引用。 更多信息,请参阅 LOB使用限制

当未指定整数时,默认长度为 1M整数 K|M|G的含义与CLOB类似。 不同之处在于,指定的数字是双字节字符的数量。

整数可以与K、M或G用0个或更多空格隔开。

CCSID 1200
指定该列是 UTF-16 编码的Unicode列。 对于ASCII或Unicode表,不得指定此条款。
BINARY(integer)
长度为整数的固定长度二进制字符串。 整数范围是1-255。 如果省略长度规范,那么假设为1个字节的长度。
BINARY VARYING( 整数 ) 或 VARBINARY( 整数 )
一个长度可变的二进制字符串,最大长度为整数 ,范围为1-32704。 长度受表格空间页面大小的限制。
BLOB( 整数 [K|M|G]或BINARY LARGE OBJECT( 整数 [K|M|G])
BLOB或二进制大对象
对于指定最大字节数长的二进制大对象(BLOB)字符串。 最大长度必须在1-2147483647之间。 BLOB列的长度可变。 在某些语境下,无论其长度如何,都不能引用。 更多信息,请参阅 LOB使用限制

当未指定整数时,默认长度为 1M整数 K|M|G的含义与CLOB相同。

整数可以与K、M或G用0个或更多空格隔开。

日期
约会。
时间
有一段时间。
TIMESTAMP 整数WITHOUT TIME ZONE
用于时间戳。 integer 指定可选的时间戳精度属性,且必须在0-12的范围内。 时间戳精度表示时间戳中包含的小数位数。 缺省值为 6。
TIMESTAMP 整数WITH TIME ZONE
带有时区的时间戳。 integer 指定可选的时间戳精度属性,且必须在0-12的范围内。 时间戳精度表示时间戳中包含的小数位数。 缺省值为 6。
ROWID
对于行ID类型。

更改开始一个表格最多只能包含两列 ROWID。 如果一个表中包含两个 ROWID 列 c,其中一列由 Db2 隐式生成,另一列则显式定义为 ROWID,且不带有 IMPLICITLY HIDDEN 属性。更改结束 ROWID列中的值对于表格中的每一行都是唯一的,且无法更新。 您必须使用 ROWID 指定 NOT NULL。

XML
对于XML文档。 只有格式正确的XML文档才能插入XML列中。

如果XML列是您为表创建的第一个XML列,则隐式创建BIGINT DOCID列,用于存储行中XML列的唯一文档标识符。

distinct-type-name
指定列的独特类型(用户定义的数据类型)。 隐式或显式模式名称用于限定名称。
NOT NULL
指定该列不允许为空,也不提供默认值。
非空且默认值
指定列不允许为空,但提供了默认值。

DECLARE TABLE的注释

处理过程中的错误处理 :如果在处理DECLARE TABLE语句时发生错误,会发出警告消息,预编译器会继续处理您的源程序。

记录不同类型列: 虽然您可以在 DECLARE TABLE 语句中将不同类型的名称指定为列的数据类型,但请改用不同类型所基于的内置数据类型。 使用基本类型,预编译器可以检查嵌入式SQL语句是否存在错误;否则,错误检查将推迟到绑定时进行。

要确定不同类型的源数据类型,请查看目录表 SYSDATATYPES 中列 SOURCETYPE 的值。

例子 DECLARE TABLE

示例1 :为示例员工表 DSN8C10.EMP 发布DECLARE TABLE语句。
EXEC SQL DECLARE DSN8C10.EMP TABLE
     (EMPNO     CHAR(6)     NOT NULL,
      FIRSTNME  VARCHAR(12) NOT NULL,
      MIDINIT   CHAR(1)     NOT NULL,
      LASTNAME  VARCHAR(15) NOT NULL,
      WORKDEPT  CHAR(3)             ,
      PHONENO   CHAR(4)             ,
      HIREDATE  DATE                ,
      JOB       CHAR(8)             ,
      EDLEVEL   SMALLINT            ,
      SEX       CHAR(1)             ,
      BIRTHDATE DATE                ,
      SALARY    DECIMAL(9,2)        ,
      BONUS     DECIMAL(9,2)        ,
      COMM      DECIMAL(9,2)        );

更改开始示例2 :为包含不同类型列的表发布DECLARE TABLE语句。更改结束

更改开始假设表 CANADIAN_SALES 保存贵公司在加拿大的销售信息。 表格中有一列名为“总计”,定义为单独的类型。 创建了独特的 CANADIAN_DOLLAR 类型,其定义如下:更改结束

更改开始
CREATE TYPE CANADIAN_DOLLAR AS DECIMAL(9,2);
更改结束

更改开始CANADIAN_SALES表创建时定义如下,其中使用不同的数据类型CANADIAN_DOLLAR作为TOTAL列的数据类型。 更改结束

更改开始
CREATE TABLE CANADIAN_SALES
     (PRODUCT_ITEM   INTEGER,
      MONTH          INTEGER,
      YEAR           INTEGER,
      TOTAL          CANADIAN_DOLLAR); -- TOTAL column data type is a distinct type
更改结束

更改开始DECLARE TABLE 语句只能包含内置数据类型。 因此,在加拿大销售表的声明表中,您需要使用加拿大元(CANADIAN_DOLLAR)的源数据类型,即小数(DECIMAL)(9,2)。更改结束

更改开始
DECLARE TABLE CANADIAN_SALES
     (PRODUCT_ITEM   INTEGER,
      MONTH          INTEGER,
      YEAR           INTEGER,
      TOTAL          DECIMAL(9,2)); -- Define the column using the source built-in data type
更改结束