Db2

如何修復 DB2 不支持的功能:預設生成

  • August 13, 2015

在 IBM DB2 上,我嘗試使用以下直接 SQL:

CREATE TABLE users (
  user_id INT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1), 
  user_name VARCHAR(16) NOT NULL, 
  email_address VARCHAR(60), 
  PRIMARY KEY (user_id)
)

然後我收到以下錯誤:

表定義語句失敗,因為在表定義中指定了表類型不支持的某些功能。不支持的功能:“GENERATED”.. SQLCODE=-1666,SQLSTATE=42613,DRIVER=3.63.123 SQL 程式碼:-1666,SQL 狀態:42613

GENERATED BY DEFAULT 應該根據IBM DB2 文件得到支持。

我的 SQL 中有什麼不正確的地方嗎?

編輯:

我將 sqlalchemy 和 ibm_db_sa 與以下程式碼一起使用:

users = Table('users', metadata,
   Column('user_id', Integer, primary_key=True),
   Column('user_name', String(16), nullable=False),
   Column('email_address', String(60), key='email')
)

產生:

CREATE TABLE users (
  user_id INT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1), 
  user_name VARCHAR(16) NOT NULL, 
  email_address VARCHAR(60), 
  PRIMARY KEY (user_id)
)

但是,通過添加 autoincrement=False 刪除 IDENTITY 並且 SQL 執行沒有問題:

users = Table('users', metadata,
   Column('user_id', Integer, primary_key=True, autoincrement=False),
   Column('user_name', String(16), nullable=False),
   Column('email_address', String(60), key='email')
)

產生:

CREATE TABLE users2 (
   user_id INT NOT NULL, 
   user_name VARCHAR(16) NOT NULL, 
   email_address VARCHAR(60),
   PRIMARY KEY (user_id)
)

列組織表不支持某些功能,包括標識列。顯然,在您的數據庫中,預設表組織(DFT_TABLE_ORG參數)設置為列。要麼改變它,要麼顯式地創建按行組織的表:

CREATE TABLE users (
  user_id INT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1), 
  user_name VARCHAR(16) NOT NULL, 
  email_address VARCHAR(60), 
  PRIMARY KEY (user_id)
) ORGANIZE BY ROW

引用自:https://dba.stackexchange.com/questions/110913