AS400 DB2:使用 DDS 和自动增量字段创建 table
AS400 DB2 : Create a table with a DDS and autoincrement field
大家早上好
我有这个 DDS 来创建文件 (table) :
A*-------------------------------------------------------------------------
A* MyTable
A*-------------------------------------------------------------------------
A R AUTDAF06
A D06IDUNT 2S 0 TEXT('ID UNIT')
A D06DESUN 30A TEXT('UNIT DESCRIPTION')
A D06CDUNT 3A TEXT('CODE UNIT')
A*
A D06CRTTI Z TEXT('CREATION TIMESTAMP')
A D06CRTUS 30A TEXT('CREATION USER')
A D06UPDTI Z TEXT('UPDATE TIMESTAMP')
A ALWNULL
A D06UPDUS 30A TEXT('UPDATE USER')
A D06DELTI Z TEXT('DELETE TIMESTAMP')
A ALWNULL
A D06DELUS 30A TEXT('DELETE USER')
A
A K D06IDUNT
A K D06DESUN
A K D06CDUNT
我想将字段 D06IDUNT 定义为唯一的自动递增。
你有什么想法吗?
如果您使用 SQL 定义 table,您可以这样做:
How to AUTO_INCREMENT in db2?
在 DB2 中创建 table 的更多示例:
https://www.toadworld.com/platforms/ibmdb2/w/wiki/6854.create-table-examples
您不能使用 DDS 创建自动增量。你必须使用 SQL DDL。
从应用程序的角度来看,使用 DDS 创建的文件与使用 SQL 创建的文件没有区别。
除了 DDS 生成的 PF 和 LF 之外,IBM 在 Navigator GUI 中提供了为任何基于 SQL 的对象生成 SQL DDL 的功能。
我拿了你的 DDS,创建了文件并检索了以下 SQL DDL:
CREATE TABLE MYLIB.AUTDAF06 (
-- SQL150B 10 REUSEDLT(*NO) in table AUTDAF06 in MYLIB ignored.
-- SQL1506 30 Key or attribute for AUTDAF06 in MYLIB ignored.
D06IDUNT NUMERIC(2, 0) NOT NULL DEFAULT 0 ,
D06DESUN CHAR(30) CCSID 37 NOT NULL DEFAULT '' ,
D06CDUNT CHAR(3) CCSID 37 NOT NULL DEFAULT '' ,
D06CRTTI TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
D06CRTUS CHAR(30) CCSID 37 NOT NULL DEFAULT '' ,
D06UPDTI TIMESTAMP DEFAULT NULL ,
D06UPDUS CHAR(30) CCSID 37 NOT NULL DEFAULT '' ,
D06DELTI TIMESTAMP DEFAULT NULL ,
D06DELUS CHAR(30) CCSID 37 NOT NULL DEFAULT '' )
RCDFMT AUTDAF06 ;
LABEL ON TABLE MYLIB.AUTDAF06
IS 'SO Example' ;
LABEL ON COLUMN MYLIB.AUTDAF06
( D06IDUNT TEXT IS 'ID UNIT' ,
D06DESUN TEXT IS 'UNIT DESCRIPTION' ,
D06CDUNT TEXT IS 'CODE UNIT' ,
D06CRTTI TEXT IS 'CREATION TIMESTAMP' ,
D06CRTUS TEXT IS 'CREATION USER' ,
D06UPDTI TEXT IS 'UPDATE TIMESTAMP' ,
D06UPDUS TEXT IS 'UPDATE USER' ,
D06DELTI TEXT IS 'DELETE TIMESTAMP' ,
D06DELUS TEXT IS 'DELETE USER' ) ;
GRANT DELETE , INSERT , SELECT , UPDATE
ON MYLIB.AUTDAF06 TO PUBLIC ;
GRANT ALTER , DELETE , INDEX , INSERT , REFERENCES , SELECT , UPDATE
ON MYLIB.AUTDAF06 TO MYLIB WITH GRANT OPTION ;
注意错误消息:-- SQL1506 30 忽略 MYLIB 中 AUTDAF06 的键或属性。
SQL 不支持具有非唯一键的 table。您的 DDS 没有指定 UNIQUE
关键字。假设您的 post 中缺少它,您可以在 CREATE TABLE
期间通过 SQL 简单地将 D06IDUNT、D06DESUN、D06CDUNT 指定为主键。
大家早上好
我有这个 DDS 来创建文件 (table) :
A*-------------------------------------------------------------------------
A* MyTable
A*-------------------------------------------------------------------------
A R AUTDAF06
A D06IDUNT 2S 0 TEXT('ID UNIT')
A D06DESUN 30A TEXT('UNIT DESCRIPTION')
A D06CDUNT 3A TEXT('CODE UNIT')
A*
A D06CRTTI Z TEXT('CREATION TIMESTAMP')
A D06CRTUS 30A TEXT('CREATION USER')
A D06UPDTI Z TEXT('UPDATE TIMESTAMP')
A ALWNULL
A D06UPDUS 30A TEXT('UPDATE USER')
A D06DELTI Z TEXT('DELETE TIMESTAMP')
A ALWNULL
A D06DELUS 30A TEXT('DELETE USER')
A
A K D06IDUNT
A K D06DESUN
A K D06CDUNT
我想将字段 D06IDUNT 定义为唯一的自动递增。
你有什么想法吗?
如果您使用 SQL 定义 table,您可以这样做: How to AUTO_INCREMENT in db2?
在 DB2 中创建 table 的更多示例: https://www.toadworld.com/platforms/ibmdb2/w/wiki/6854.create-table-examples
您不能使用 DDS 创建自动增量。你必须使用 SQL DDL。
从应用程序的角度来看,使用 DDS 创建的文件与使用 SQL 创建的文件没有区别。
除了 DDS 生成的 PF 和 LF 之外,IBM 在 Navigator GUI 中提供了为任何基于 SQL 的对象生成 SQL DDL 的功能。
我拿了你的 DDS,创建了文件并检索了以下 SQL DDL:
CREATE TABLE MYLIB.AUTDAF06 (
-- SQL150B 10 REUSEDLT(*NO) in table AUTDAF06 in MYLIB ignored.
-- SQL1506 30 Key or attribute for AUTDAF06 in MYLIB ignored.
D06IDUNT NUMERIC(2, 0) NOT NULL DEFAULT 0 ,
D06DESUN CHAR(30) CCSID 37 NOT NULL DEFAULT '' ,
D06CDUNT CHAR(3) CCSID 37 NOT NULL DEFAULT '' ,
D06CRTTI TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
D06CRTUS CHAR(30) CCSID 37 NOT NULL DEFAULT '' ,
D06UPDTI TIMESTAMP DEFAULT NULL ,
D06UPDUS CHAR(30) CCSID 37 NOT NULL DEFAULT '' ,
D06DELTI TIMESTAMP DEFAULT NULL ,
D06DELUS CHAR(30) CCSID 37 NOT NULL DEFAULT '' )
RCDFMT AUTDAF06 ;
LABEL ON TABLE MYLIB.AUTDAF06
IS 'SO Example' ;
LABEL ON COLUMN MYLIB.AUTDAF06
( D06IDUNT TEXT IS 'ID UNIT' ,
D06DESUN TEXT IS 'UNIT DESCRIPTION' ,
D06CDUNT TEXT IS 'CODE UNIT' ,
D06CRTTI TEXT IS 'CREATION TIMESTAMP' ,
D06CRTUS TEXT IS 'CREATION USER' ,
D06UPDTI TEXT IS 'UPDATE TIMESTAMP' ,
D06UPDUS TEXT IS 'UPDATE USER' ,
D06DELTI TEXT IS 'DELETE TIMESTAMP' ,
D06DELUS TEXT IS 'DELETE USER' ) ;
GRANT DELETE , INSERT , SELECT , UPDATE
ON MYLIB.AUTDAF06 TO PUBLIC ;
GRANT ALTER , DELETE , INDEX , INSERT , REFERENCES , SELECT , UPDATE
ON MYLIB.AUTDAF06 TO MYLIB WITH GRANT OPTION ;
注意错误消息:-- SQL1506 30 忽略 MYLIB 中 AUTDAF06 的键或属性。
SQL 不支持具有非唯一键的 table。您的 DDS 没有指定 UNIQUE
关键字。假设您的 post 中缺少它,您可以在 CREATE TABLE
期间通过 SQL 简单地将 D06IDUNT、D06DESUN、D06CDUNT 指定为主键。