db2clp + 文本編輯器,或 Data Studio。CREATE VIEW v AS SELECT * FROM (SELECT a,b,c FROM t ORDER BY a) AS sub,且需打補丁支持。SELECT ... FETCH FIRST n ROWS ONLY 在存儲過程中不可用,需改用游標 + 計數器。| 坑點 | 表現 | 規避方案 |
|---|---|---|
| 無 TRIM 函數 | 只能 LTRIM(RTRIM()) | 自寫 UDF TRIM() 封裝 |
| INSERT 不支持表達式賦值 | 需先存變量再插入 | SET v = expr; INSERT ... VALUES(v) |
| CALL 過程不能用常量參數 | 報錯 | 常量先存變量再傳遞 |
| 動態 SQL 僅限過程,函數不可用 | PREPARE/EXECUTE 在函數報錯 | 邏輯下沉到過程,函數調用過程 |
| COMMIT/ROLLBACK 自動關閉游標 | 游標失效 | 聲明游標加 WITH HOLD;謹慎使用單獨提交 |
| Proc Builder 調試內存不足、超時 | 花屏、斷點掛起報超時 | 改用 db2 -td@ -vf script.db2 腳本式調試 |
| 日期運算 2 月 29 日 +1 MONTH 報錯 | SQLSTATE 01506 | 以月初為基準:(DATE('2004-02-01') + 1 MONTH) |
| 存儲過程編譯需 C 編譯器 | 創建失敗 | 安裝 VS / gcc,設置 DB2_SQLROUTINE_COMPILER_PATH 指向 vcvars32.bat 或 gcc |
| 變量賦值不能用 SELECT INTO | 語法錯誤 | 統一用 SET v = (SELECT ...) |
ALTER TABLE ... ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE 秒級清空大表(慎用,不可回滾)。db2move 導出/導入:db2move db export -tn tab1,tab2 -u user -p pwd / db2move db import。CREATE BUFFERPOOL bp1 SIZE 10000、ALTER BUFFERPOOL bp1 SIZE -1(-1 表由 BUFFPAGE 參數控制)。WHERE (colA,colB) IN ((v1,v2),(v3,v4))。
-- 存儲過程
SELECT * FROM SYSCAT.PROCEDURES;
-- 表約束
SELECT * FROM SYSCAT.CHECKS WHERE TABNAME='T';
-- 參考完整性
SELECT * FROM SYSCAT.REFERENCES WHERE TABNAME='T';
-- 緩衝池狀態
SELECT * FROM SYSCAT.BUFFERPOOLS;
-- 實例/數據庫配置
db2 get dbm cfg / db2 get db cfg for DB
db2 update dbm cfg using PARAM VALUE / db2 update db cfg for DB using PARAM VALUE
這 31 條經驗覆蓋安裝部署、工具選型、SQL 方言陷阱、存儲過程編譯調試、日期邊界、性能優化、系統目錄查詢,建議團隊內部建立《DB2 開發規範清單》作為 Code Review 基線。