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

DB2 程式設計技巧詳解 (三) - FOR LOOP 游標、WHERE CURRENT OF、CASE/LOCATE/DAYS、UDF、Identity

     編輯:DB2 教學

1.4 游標使用 - FOR LOOP 模式 (簡潔但不支援 HOLD)

FOR LOOP_C1 AS C1 CURSOR FOR
  SELECT MARKET_CODE AS MARKET_CODE
  FROM TB_MARKET_CODE
  FOR UPDATE
DO
  -- 迴圈本文,自動 OPEN/FETCH/CLOSE
  -- 變數直接用 MARKET_CODE
END FOR;
  • 優點:語法簡潔,自動管理游標生命週期。
  • 限制:不支援 WITH HOLD,迴圈內不可有 COMMIT/ROLLBACK。
  • 若無交易控制需求,推薦使用此模式。

修改游標當前列:WHERE CURRENT OF

UPDATE TB_MARKET_CODE SET MARKET_CODE = '0'
WHERE CURRENT OF C1;
  • 游標必須定義為 FOR UPDATE。
  • 同樣受 FOR UPDATE 限制 (不可與 GROUP BY/DISTINCT/ORDER BY 等同用)。

1.5 類似 DECODE:CASE 運算式

SELECT CASE A1
  WHEN '1' THEN 'N1'
  WHEN '2' THEN 'N2'
  ELSE 'N3'
END AS AA1
FROM TBL;

標準 SQL,可移植性優於 Oracle DECODE。

1.6 類似 CHARINDEX:LOCATE

LOCATE('尋找字串', '來源字串')  -- 回傳 1-based 位置,0 表不存在
-- 例: LOCATE('y', 'dfdasfay') → 8

1.7 類似 DATEDIFF:DAYS 差值

DAYS(DATE('2001-06-05')) - DAYS(DATE('2001-04-01'))
-- DAYS 回傳從 0001-01-01 起算的天數

1.8 UDF 撰寫範例

C 語言 UDF 參考:sqllib/samples/cli/udfsrv.c

1.9 Identity 欄位建表

CREATE TABLE TEST (
  T1 SMALLINT NOT NULL
    GENERATED ALWAYS AS IDENTITY
    (START WITH 500, INCREMENT BY 1),
  T2 CHAR(1)
);
  • 單表僅允許一個 Identity 欄位。
  • GENERATED BY DEFAULT 允許手動指定值;ALWAYS 完全由系統產生。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved