DB2 錯誤訊息僅回傳 SQLCODE、SQLSTATE、SQLERRMC、DRIVER 四個代碼,缺乏人類可讀描述。善用 DB2 內建的 db2 "? SQLxxxx" 指令可秒級獲取詳細中文錯誤說明與處置建議。
# 進入 DB2 CLP 互動模式或命令列
db2 "? SQL00301"
# 或
db2 ? sql00301
# 輸出範例:
SQL0301N The value of the argument of the SUBSTR function is out of range.
...
User response: Ensure that the start position and length values are valid.
SQL0000N = sql0000 = SQL0000Wdb2 "? XXXnnnnn"db2 "? SQL0301" | more| 代碼 | 含義 | 診斷優先級 |
|---|---|---|
| SQLCODE | SQL 錯誤碼 (負數=錯誤, 正數=警告, 0=成功) | 第 1 優先,通常足以定位問題 |
| SQLSTATE | 執行狀態碼 (5 字元,ANSI 標準) | 第 2 優先,跨平台可攜 |
| SQLERRMC | 錯誤訊息代碼 (含物件名、值等動態資訊) | SQLCODE 無法定位時參考 |
| DRIVER | JDBC/CLI 驅動版本 | 僅用於驅動相容性排查 |
# 應用報錯: SQLCODE=-301
db2 "? SQL0301"
-- 立即獲得: SUBSTR 函數參數超出範圍,檢查起始位置與長度
# 應用報錯: SQLCODE=-803
db2 "? SQL0803"
-- 立即獲得: 唯一約束/索引違規,重複鍵值
| 範圍 | 類別 | 典型代碼 |
|---|---|---|
| -001 ~ -099 | 語法/解析錯誤 | -104 (語法錯誤), -301 (函數參數) |
| -100 ~ -199 | 物件不存在/權限 | -204 (物件未定義), -551 (無權限) |
| -200 ~ -299 | 資料型別/轉換 | -301 (SUBSTR), -408 (不相容型別) |
| -300 ~ -399 | 約束/索引違規 | -803 (唯一鍵重複), -805 (套件缺失) |
| -400 ~ -499 | 交易/鎖/並發 | -911 (鎖逾時), -913 (死鎖/鎖升級) |
| -500 ~ -599 | 授權/安全 | -551 (無權限), -552 (授權缺失) |
| -600 ~ -699 | 公用程式/工具 | -668 (表狀態禁止操作), -669 (表鎖定) |
| -900 ~ -999 | 系統/資源/內部 | -902 (系統錯誤), -968 (表空間滿) |
db2 "? SQLxxxx"db2diag.log 分析嚴重錯誤上下文DB2 內建說明系統是 DBA 與開發最強診斷工具,零成本、零安裝、中文支援,善用之事半功倍。