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

DB2 程式設計技巧詳解 (四) - COALESCE、ROW_COUNT、結果集回傳、型別轉換、SP 呼叫

     編輯:DB2 教學

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:需注意參數對應與交易邊界。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved