Db2
如何修復 DB2 不支持的功能:預設生成
在 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