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

DB2 開發避坑指南:10 大注意事項與最佳實踐

     編輯:DB2 教學

工具與界面篇

  1. 客戶端配置: 遠程服務器需在「客戶機配置輔助程序」建立連接配置。
  2. Control Center 不支持直接增刪改數據: 必須寫 SQL。第三方工具(如 Quest)雖可編輯但無複製貼上、Tab 切換,體驗差;PowerBuilder 可單元格編輯但刪除表按鈕太近且無提示,誤操作風險極高。建議:老實寫 UPDATE/DELETE 語句。

SQL 語法限制篇

  1. 視圖不支持直接 ORDER BY: 需用子查詢包裹:
    CREATE VIEW V AS
    SELECT * FROM (SELECT a,b,c FROM T ORDER BY a) AS TMP;
    前提是已打補丁(早期版本限制)。
  2. 存儲過程常見坑:
    • 無 TRIM,需 LTRIM(RTRIM(...))。
    • INSERT 不支持表達式賦值,必須先賦變量。
    • 調用其他過程不能用常量做參數,必須先賦變量。
    • SELECT ... FETCH FIRST n ROWS ONLY 在過程中不可用(早期版本)。
  3. 函數體內不可用動態 SQL: 過程可用 EXECUTE IMMEDIATE,函數不行。
  4. COMMIT/ROLLBACK 會自動關閉游標: 謹慎使用單獨提交,或重新打開游標。
  5. Proc Builder 調試痛點: 內存不足易花屏,斷點停留稍久即超時,體驗極差。

日期運算陷阱

  1. 月份加減法的「閏年陷阱」:
    -- 若日期變量 = '2004-02-29'
    DATE_VAR + 1 MONTH  -- 報錯 SQLSTATE 01506:結果日期無效
    替代方案: 取當月第一天再加減月:
    (DATE_VAR - DAY(DATE_VAR) DAYS + 1 DAYS) + 1 MONTH

變量賦值規範

  1. 禁用 SELECT ... INTO ... 給標量賦值,統一用 SET var = (SELECT ...),兼容性更好、錯誤信息更清晰。

實戰函數範例:規範賦值 + COALESCE 防空

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 #SYNC 10;

總結

DB2 功能強大但細節多、限制多。牢記:工具別貪圖方便、語法查手冊、日期防閏年、賦值用 SET、游標防自閉、調試換工具。將這些寫入團隊編碼規範,能省去無數調試夜。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved