CREATE VIEW V AS
SELECT * FROM (SELECT a,b,c FROM T ORDER BY a) AS TMP;
前提是已打補丁(早期版本限制)。
TRIM,需 LTRIM(RTRIM(...))。INSERT 不支持表達式賦值,必須先賦變量。SELECT ... FETCH FIRST n ROWS ONLY 在過程中不可用(早期版本)。EXECUTE IMMEDIATE,函數不行。-- 若日期變量 = '2004-02-29'
DATE_VAR + 1 MONTH -- 報錯 SQLSTATE 01506:結果日期無效
替代方案: 取當月第一天再加減月:
(DATE_VAR - DAY(DATE_VAR) DAYS + 1 DAYS) + 1 MONTH
SELECT ... INTO ... 給標量賦值,統一用 SET var = (SELECT ...),兼容性更好、錯誤信息更清晰。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、游標防自閉、調試換工具。將這些寫入團隊編碼規範,能省去無數調試夜。