1.10 空值處理:COALESCE
SELECT DEPTNO, DEPTNAME, COALESCE(MGRNO, 'ABSENT'), ADMRDEPT
FROM DEPARTMENT;
- 回傳參數清單中第一個非 NULL值,支援多參數。
- 類似 Oracle
NVL (兩參數) / COALESCE (多參數)。
1.11 取得異動筆數:GET DIAGNOSTICS
DECLARE V_COUNT INT;
UPDATE TB_TEST SET T1='0' WHERE T2='2';
GET DIAGNOSTICS V_COUNT = ROW_COUNT;
-- 僅對 INSERT/UPDATE/DELETE 有效,對 SELECT INTO 無效
1.12 SP 回傳結果集完整範例
步驟 1:建立回傳結果集的 SP
CREATE PROCEDURE DB2INST1.PROC1 ()
LANGUAGE SQL
RESULT SETS 2
P1: BEGIN
DECLARE C1 CURSOR WITH RETURN TO CALLER FOR
SELECT MARKET_CODE FROM TB_MARKET_CODE;
DECLARE C2 CURSOR WITH RETURN TO CALLER FOR
SELECT MARKET_CODE FROM TB_MARKET_CODE;
OPEN C1;
OPEN C2;
END P1;
步驟 2:呼叫端處理結果集
CREATE PROCEDURE DB2INST1.PROC2 (OUT OUT_MARKET_CODE CHAR(1))
LANGUAGE SQL
P1: BEGIN
DECLARE LOC1, LOC2 RESULT_SET_LOCATOR VARYING;
CALL PROC1;
ASSOCIATE RESULT SET LOCATORS (LOC1, LOC2) WITH PROCEDURE PROC1;
ALLOCATE C1 CURSOR FOR RESULT SET LOC1;
ALLOCATE C2 CURSOR FOR RESULT SET LOC2;
FETCH C1 INTO OUT_MARKET_CODE;
CLOSE C1;
END P1;
動態 SQL 寫法
DECLARE C1 CURSOR FOR STMT1;
PREPARE STMT1 FROM 'ALLOCATE C2 CURSOR FOR RESULT SET ?';
關鍵注意事項
- SP 多次呼叫,僅能取得最近一次呼叫的結果集。
ALLOCATE 的游標不能再次 OPEN,但可 CLOSE (會關閉 SP 內對應游標)。
1.13 型別轉換:CAST
SELECT CAST(CURRENT TIME AS CHAR(8)) FROM TB_MARKET_CODE;
1.14 SP 互相呼叫
- C SP 可互呼。
- SQL SP 可互呼。
- SQL SP 呼叫 C SP / C SP 呼叫 SQL SP:需注意參數對應與交易邊界。