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

DB2 程式設計技巧(三):游標 FOR 迴圈、WHERE CURRENT OF、DECODE/CHARINDEX/DATEDIFF 替代、UDF、IDENTITY

     編輯:DB2 綜合知識

DB2 進階程式技巧實戰

游標 FOR 迴圈寫法

FOR loopcs1 AS cursor1 CURSOR FOR
  SELECT market_code AS market_code
  FROM tb_market_code
  FOR UPDATE
DO
  -- 處理邏輯
END FOR;

優點:簡潔,無需 OPEN/FETCH/CLOSE。缺點:不支援 WITH HOLD,迴圈內不可 COMMIT/ROLLBACK。若無交易控制需求,推薦使用。

修改游標當前列

UPDATE tb_market_code SET market_code='0' WHERE CURRENT OF cursor1;
-- 必須宣告 FOR UPDATE 游標
DECLARE cursor1 CURSOR FOR SELECT market_code FROM tb_market_code FOR UPDATE;

FOR UPDATE 不可與 GROUP BY、DISTINCT、ORDER BY、FOR READ ONLY、UNION/EXCEPT/INTERSECT (UNION ALL 除外) 共用。

常用 Oracle 函數替代方案

  • DECODE 轉碼:
    SELECT CASE a1
      WHEN '1' THEN 'n1'
      WHEN '2' THEN 'n2'
      ELSE 'n3'
    END AS aa1 FROM ...
  • CHARINDEX 字元位置:LOCATE('y', 'dfdasfay')
  • DATEDIFF 日期差天數:DAYS(DATE('2001-06-05')) - DAYS(DATE('2001-04-01')),DAYS 回傳自 0001-01-01 起算天數

UDF 開發參考

C 語言 UDF 範例見 sqllib\samples\cli\udfsrv.c。

IDENTITY 自動遞增欄位

CREATE TABLE test (
  t1 SMALLINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 500, INCREMENT BY 1),
  t2 CHAR(1)
);

單表僅允許一個 IDENTITY 欄位。

COALESCE 空值防護

SELECT DEPTNO, DEPTNAME, COALESCE(MGRNO, 'ABSENT'), ADMRDEPT FROM DEPARTMENT

回傳第一個非空運算式,支援多參數,優於 Oracle ISNULL (僅兩參數)。

取得影響列數

GET DIAGNOSTICS v_count = ROW_COUNT;

僅對 UPDATE/INSERT/DELETE 有效,對 SELECT INTO 無效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved