首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 建表常見錯誤排查:INTEGER 長度限制與主鍵 NOT NULL 限制

     編輯:DB2 教學

錯誤一:INTEGER 不支援長度指定

CREATE TABLE FRONT.SCORE_REVERSE (
  SERIAL_NO VARCHAR(50),
  SECRET_KEY VARCHAR(50),
  TRADEBOX_ID INTEGER(32),   -- 錯誤寫法
  ...
  PRIMARY KEY (SERIAL_NO)
);

報錯:SQLCODE=-104, SQLSTATE=42601, SQLERRMC=INTEGER;R(50)

原因:DB2 的 INTEGER、SMALLINT, BIGINT 為定長整數型別,不接受長度參數 (不同於 VARCHAR)。

修正:移除長度,改為 TRADEBOX_ID INTEGER、COMMODITY_ID INTEGER、POINT INTEGER。

錯誤二:主鍵欄位必須明確 NOT NULL

修正 INTEGER 後再執行,報錯:SQLCODE=-542, SQLSTATE=42831, SQLERRMC=SERIAL_NO

原因:DB2 建立主鍵時,主鍵欄位必須具備 NOT NULL 屬性。工具產生的 DDL 未在 SERIAL_NO VARCHAR(50) 後加 NOT NULL。

修正:SERIAL_NO VARCHAR(50) NOT NULL。

最終可執行 DDL

CREATE TABLE FRONT.SCORE_REVERSE (
  SERIAL_NO VARCHAR(50) NOT NULL,
  SECRET_KEY VARCHAR(50),
  TRADEBOX_ID INTEGER,
  REDUCE_POINT_TYPE VARCHAR(50),
  REDUCE_POINT_REASON VARCHAR(50),
  REDUCE_TIME VARCHAR(50),
  LOGIN_NAME VARCHAR(50),
  COMMODITY_ID INTEGER,
  COMMODITY_NUMBER VARCHAR(50),
  POINT INTEGER,
  CONTACT_NAME VARCHAR(50),
  CONTACT_MOBILE_NO VARCHAR(50),
  CONTACT_ADDRESS VARCHAR(50),
  COMMODITY_TYPE VARCHAR(50),
  REVERSE_TIME VARCHAR(50),
  PRIMARY KEY (SERIAL_NO)
);

心得摘要

  • DB2 整數型別 (SMALLINT/INTEGER/BIGINT) 不可加長度。
  • 主鍵欄位必須顯式宣告 NOT NULL (或由工具自動補齊)。
  • 遇到 SQLERRMC 關鍵字可直接定位語法錯誤位置。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved