本機實例可直連;遠程服務端需在客戶端運行 「客戶機配置輔助程序」→ 添加數據庫別名 → 指定主機/IP、端口、實例名**,才能在控制中心/CLP 連接。
INSERT/UPDATE/DELETE SQL;或用 PowerBuilder(網格編輯正常,但**刪除表按鈕極近編輯按鈕,誤觸無提示直接刪表**,極度危險)。-- 錯誤
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;
| 缺失特性 | 變通方案 |
|---|---|
無 TRIM(),只有 LTRIM()/RTRIM() | LTRIM(RTRIM(col)) |
INSERT 不支持表達式賦值 | 先賦值給變量,再 INSERT ... VALUES(var) |
| 調用存儲過程不支持常量參數 | 常量先賦值給變量,再傳變量 |
存儲過程內不可用 FETCH FIRST n ROWS ONLY | 用游標 + 計數器控制 |
鐵律:CREATE FUNCTION 體內**禁用動態 SQL**(PREPARE/EXECUTE IMMEDIATE);CREATE PROCEDURE 允許。混用會編譯報錯。
單獨提交(COMMIT)會關閉所有未加 WITH HOLD 的游標。
對策:游標聲明加 WITH HOLD;或將需跨提交的游標操作放在同一事務內;**謹慎使用自動提交/單獨提交**。
DATE_VAR + 1 MONTHS 當 DATE_VAR = '2004-02-29' 時拋錯 SQLSTATE 01506(結果無效日期被調整)。
安全模式:取「當月第一天」為基準再加減月份:
DATE(DATE_VAR - DAY(DATE_VAR) DAYS + 1 DAYS) + 1 MONTHS
-- 錯誤
SELECT COALESCE(RECEIVE_ID,-1) INTO V_SELL_ID FROM IS_ORDER WHERE ROW_ID=IN_ROW_ID;
-- 正確
SET V_SELL_ID = (SELECT COALESCE(RECEIVE_ID,-1) FROM IS_ORDER WHERE ROW_ID=IN_ROW_ID);
完整函數示例見原文,核心:**標量子查詢賦值用 SET var = (subquery),而非 SELECT ... INTO**。
配遠程、寫SQL、視圖套、存儲繞、函數靜、游標Hold、月首算、Set賦值
內化這八條,DB2 開發效率與代碼質量雙提升。