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 指定为主键。