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。
修正 INTEGER 後再執行,報錯:SQLCODE=-542, SQLSTATE=42831, SQLERRMC=SERIAL_NO
原因:DB2 建立主鍵時,主鍵欄位必須具備 NOT NULL 屬性。工具產生的 DDL 未在 SERIAL_NO VARCHAR(50) 後加 NOT NULL。
修正:SERIAL_NO VARCHAR(50) NOT NULL。
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) );
SMALLINT/INTEGER/BIGINT) 不可加長度。NOT NULL (或由工具自動補齊)。SQLERRMC 關鍵字可直接定位語法錯誤位置。