DB2 功能強大,但與 Oracle、SQL Server、PostgreSQL 等存在顯著差異。以下 8 大實戰陷阱源自一線開發經驗,助您避坑提效。
資料庫伺服器非本機時,必須在「用戶端配置輔助程式」建立連接別名,否則控制中心無法連線。
控制中心僅支援 SQL 執行;Quest Central 雖可編輯單元格,但無法 Commit、複製貼上受限;PowerBuilder 雖支援單元格編輯,但「刪除表」按鈕極近「編輯」按鈕且無確認提示,誤觸即刪表。建議:老老實實寫 INSERT/UPDATE/DELETE SQL。
錯誤寫法:CREATE VIEW v AS SELECT * FROM t ORDER BY a
正確寫法(需打補丁):CREATE VIEW v AS SELECT * FROM (SELECT a,b,c FROM t ORDER BY a) AS tab
LTRIM(RTRIM(col))。另:SELECT ... FETCH FIRST n ROWS ONLY 在存儲過程中不可用。
存儲過程可用動態 SQL,但標量/表函數(UDF)嚴禁動態 SQL,違者編譯報錯。
單獨提交需謹慎,否則後續 FETCH 會報錯「游標已關閉」。
date_var + 1 MONTHS 若 date_var = '2004-02-29' 會報錯 SQLSTATE 01506(無效日期調整)。
替代方案:取當月第一天為基準再加減月份:(DATE(date_var) - DAY(date_var) DAYS + 1 DAYS) + 1 MONTHS。
錯誤:SELECT col INTO :var FROM t WHERE ...
正確:SET var = (SELECT col FROM t WHERE ...)
範例見原文函數 ISORDERSUBMITDATE,所有賦值均採 SET var = (subquery) 形式。
熟悉這些差異,能讓您從 Oracle/SQL Server 遷移至 DB2 時少走彎路,編寫更健壯、高效的 SQL 與存儲過程。