AS400 DB2:创建一个包含DDS和自动增量字段的表

时间:2016-03-28 16:06:22

标签: db2 auto-increment ibm-midrange

早上好。

我有这个DDS来创建一个文件(表):

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定义为唯一的自动增量。

你有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果使用SQL定义表,则可以执行以下操作: How to AUTO_INCREMENT in db2?

在DB2中创建表的更多示例: https://www.toadworld.com/platforms/ibmdb2/w/wiki/6854.create-table-examples

答案 1 :(得分:0)

您无法使用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不支持具有非唯一键的表。您的DDS没有指定UNIQUE关键字。假设您的帖子中遗漏了,您只需在CREATE TABLE期间通过SQL指定D06IDUNT,D06DESUN,D06CDUNT作为主键。