DB2 功能強大但細節眾多,許多「坑」只有踩過才知道。本文彙總 8 大實戰必知點,涵蓋連接配置、工具選擇、視圖限制、存儲過程陷阱、日期運算、變量賦值、游標行為、調試技巧,助您少走彎路。
| 工具 | 增刪改 | 複製貼上/Tab | 單元格編輯 | 備註 |
| Control Center | 僅 SQL | 不支援 | 不可 | 需寫 UPDATE/DELETE |
| Quest Central / Toad | 可 | 不支援 | 視覺可編輯但無法 Commit | 慎用 |
| PowerBuilder (PB) | 可 | 支援 | 支援 | 刪除表按鈕極近編輯按鈕,誤觸風險極高 |
建議:養成寫 SQL(INSERT/UPDATE/DELETE)習慣,最安全可控。
3. 視圖中不能直接用 ORDER BY
錯誤寫法: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;
原理:視圖定義本質是查詢轉換,子查詢 + 別名繞過語法限制。
4. 存儲過程常見陷阱
- 無 TRIM 函數:只能
LTRIM(RTRIM(str)) 去除兩端空格。
- INSERT 不支援表達式賦值:
INSERT INTO t VALUES (UPPER('abc')) 報錯,必須先 SET v = UPPER('abc'); INSERT ... VALUES (v)。
- 調用其他存儲過程不能直接用常數參數:必須先賦值給變量再傳遞。
FETCH FIRST n ROWS ONLY 在存儲過程中不可用:改用游標 + 計數器邏輯。
5. 動態 SQL:存儲過程可用,函數不可用
PREPARE / EXECUTE IMMEDIATE 僅支援於存儲過程(LANGUAGE SQL),SQL 函數(FUNCTION)內禁止動態 SQL。
6. 游標與提交/回滾行為
- 遇到
COMMIT 或 ROLLBACK,所有開啟游標自動關閉(除非宣告 WITH HOLD)。
- 慎用
CHAINED / 單獨提交模式,避免非預期游標關閉導致邏輯錯誤。
7. 日期運算陷阱:月份加減與月末日期
問題:DATE('2004-02-29') + 1 MONTH → 錯誤 SQLSTATE 01506(無效日期 2004-03-29)。
替代方案:以「當月第一天」為基準運算:
-- 取下月第一天
SET next_month_first = (DATE(CURRENT DATE) - DAY(CURRENT DATE) DAYS) + 1 MONTH + 1 DAY;
8. 變量賦值:只能用 SET,不能用 SELECT INTO
錯誤:SELECT col INTO v FROM t WHERE ...
正確:SET v = (SELECT col FROM t WHERE ...)
完整範例(函數內多變量賦值):
CREATE FUNCTION SXFM.ISORDERSUBMITDATE(IN_ROW_ID DECIMAL(16,0))
RETURNS DATE LANGUAGE SQL
BEGIN ATOMIC
DECLARE V_SUBMIT_DATE DATE;
DECLARE V_SELL_ID DECIMAL(16,0);
DECLARE V_BUY_ID DECIMAL(16,0);
SET V_SELL_ID = (SELECT COALESCE(RECEIVE_ID, -1) FROM IS_ORDER WHERE ROW_ID = IN_ROW_ID);
SET V_BUY_ID = (SELECT COALESCE(PAY_ID, -1) FROM IS_ORDER WHERE ROW_ID = IN_ROW_ID);
SET V_SUBMIT_DATE = (
SELECT DATE(MAX(A.SUBMIT_DATE))
FROM AM_AUDIT_QUEUE A, SM_USER B, SM_USER C
WHERE A.TABLE_CODE = 'IS_ORDER'
AND A.TABLE_ROW_ID = IN_ROW_ID
AND A.AUDIT_EMP_ID = C.ROW_ID
AND C.BRANCH_ID = V_BUY_ID
AND A.SUBMIT_EMP_ID = B.ROW_ID
AND B.BRANCH_ID = V_SELL_ID
);
RETURN V_SUBMIT_DATE;
END;
調試工具吐槽
- Procedure Builder:調試易記憶體不足、畫面花屏;斷點停留稍久即超時,體驗極差。
- 建議:改用 Data Studio / VS Code + IBM DB2 Extension 進行現代化調試。
結語
掌握這 8 大實戰知識點,能避開 90% 的 DB2 開發運維坑。核心心法:多寫 SQL 少依賴工具、理解邊界行為、善用變量中介、養成標準化編碼規範。將這些經驗沉澱為團隊編碼規範與 Code Review 清單,讓踩坑經驗轉化為集體資產。
- 上一篇文章: DB2 9.7 三大核心亮點:混合分析、極致成本優化、Oracle 兼容性
- 下一篇文章: DB2 執行計畫優化實戰:統計信息收集、RUNSTATS、REORGCHK、LOAD STATISTICS 與 db2look 遷移
Copyright ©
程式碼之家 All Rights Reserved