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

DB2 刪除結果集前 N 筆或後 N 筆資料的正確做法:游標與 FETCH 技巧

     編輯:DB2 教學

核心觀念:資料表無序,結果集有序

關聯式資料表本身沒有「前幾列」或「後幾列」的概念,順序只存在於 結果集 (Result Set) 中。若需刪除結果集的前 N 筆或後 N 筆,必須先定義排序,再透過游標操作。

刪除前 N 筆資料

  1. 使用 FETCH FIRST N ROWS ONLY 限制查詢結果。
  2. 宣告游標並加 FOR UPDATE OF 子句。
  3. 迴圈 FETCH → DELETE WHERE CURRENT OF cursor N 次。
-- 範例:刪除依 ID 排序的前 10 筆
DECLARE c1 CURSOR FOR
  SELECT * FROM my_table ORDER BY id
  FOR UPDATE OF col1;

OPEN c1;
SET i = 1;
WHILE i <= 10 DO
  FETCH c1 INTO ...;
  IF SQLCODE != 0 THEN LEAVE; END IF;
  DELETE FROM my_table WHERE CURRENT OF c1;
  SET i = i + 1;
END WHILE;
CLOSE c1;

刪除後 N 筆資料 (需可捲動游標)

標準游標僅能向前,需使用 可捲動游標 (Scrollable Cursor):

  1. 宣告:DECLARE c1 SCROLL CURSOR FOR ...
  2. 移至最後:FETCH LAST FROM c1
  3. 向前迴圈:FETCH PRIOR FROM c1 重複 N-1 次,每次執行 DELETE WHERE CURRENT OF c1。
DECLARE c1 SCROLL CURSOR FOR
  SELECT * FROM my_table ORDER BY id
  FOR UPDATE OF col1;

OPEN c1;
FETCH LAST FROM c1;          -- 移至最後一筆
SET i = 1;
WHILE i <= 10 DO
  DELETE FROM my_table WHERE CURRENT OF c1;
  FETCH PRIOR FROM c1;       -- 往前一筆
  SET i = i + 1;
END WHILE;
CLOSE c1;

關鍵提醒

  • 無法在單一 DELETE 陳述式的 WHERE 子句中直接限制「前 N 筆」或「後 N 筆」。
  • 必須撰寫程式 (嵌入式 SQL、CLP 腳本、存儲過程等) 迴圈處理。
  • 參考《DB2 SQL Reference》與《DB2 Application Programming Guide》中關於可捲動游標章節。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved