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

DB2 程式設計技巧(五):錯誤處理、IMPORT/VALUES、隔離等級、ATOMIC、大量導入、複雜 SQL、SP 選擇、HASH JOIN、避免 COUNT(*)

     編輯:DB2 綜合知識

DB2 開發效能與健壯性關鍵技巧

SP 錯誤處理:過濾 SQLWARNING

呼叫回傳結果集/臨時表/輸出參數的 SP 會自動產生 SQLWARNING,若統一記錄警告會產生大量 SQLCODE=0 噪音。解法:

DECLARE V_STATUS INTEGER DEFAULT 0;
CALL SPNAME;
SET V_STATUS = 1;
DECLARE CONTINUE HANDLER FOR SQLWARNING
BEGIN
  IF V_STATUS <> 1 THEN
    -- 真實警告處理,寫日誌
    SET V_STATUS = 0;
  END IF;
END;

IMPORT 用法

db2 import from gh1.out of DEL messages err.txt insert into db2inst1.tb_dbf_match_ha
-- 注意:必須指定 Schema

VALUES 合併多重 SET

VALUES (expr1, expr2) INTO (var1, var2);  -- 效率優於多句 SET
-- 注意:VALUES 不能直接指派 NULL 給變數
-- VALUES (NULL) INTO var;  -- 會報錯

指定查詢隔離等級

SELECT * FROM tb_head_stock_balance WITH UR  -- Uncommitted Read

ATOMIC vs NOT ATOMIC

ATOMIC 區塊視為單一整體,任一語句失敗則整區塊回滾 (含已成功語句),類似交易語意。

大量資料導入策略

EXPORT → LOAD 效能最佳 (LOAD 不寫日誌),優於 SELECT INTO。

SQL 陳述式複雜度策略

  • DB2:優化器強,**盡量合併為大型複雜 SQL**,減少陳述式個數 (每句皆有 RESET SQLCODE/STATE 開銷)
  • Oracle:相反,建議拆解簡化

SP 語言選擇

  • SQL 複雜、邏輯簡單 → SQL SP (開發效率高)
  • 邏輯複雜、SQL 簡單 → C SP (執行效率高)

查詢優化關鍵參數

db2set DB2_HASH_JOIN=Y       -- Hash Join 排序優化,大表 JOIN 效能大幅提升
db2set DB2_RR_TO_RS=Y        -- RR 降為 RS,減少 Next-Key 鎖管理

避免 COUNT(*) / EXISTS

  1. COUNT(*) 全表掃描極慢
  2. EXISTS 遇首筆即停,但仍有掃描開銷
  3. 若為 SELECT INTO 前檢查:直接 SELECT INTO,捕捉 SQLCODE=100 (NOT FOUND) 或 SQLSTATE='20000',或多筆錯誤 → CONTINUE HANDLER FOR NOT FOUND / EXCEPTION,**最快**
  4. 需判斷筆數:游標計數器累加至預期值即離開,避免全表掃描
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved