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

DB2 刪除結果集前 N 列與表資料刪除限制說明

     編輯:DB2 教學

關鍵概念:關聯式資料表無「頂端/底端」

資料表本質是無序集合 (Relation);只有 結果集 (Result Set) 才有順序概念 (依 ORDER BY 決定)。

取得結果集前 N 列

SELECT * FROM tab ORDER BY col FETCH FIRST N ROWS ONLY;

取得結果集後 N 列 (需可捲動游標)

  1. 宣告 SCROLLABLE CURSOR:
    DECLARE c SCROLL CURSOR FOR SELECT * FROM tab ORDER BY col;
  2. OPEN c;
  3. FETCH LAST FROM c; 定位至最後一列
  4. 迴圈 N-1 次 FETCH PRIOR FROM c; 向前捲動

標準 SQL 游標操作,需應用程式 (JDBC/CLI/ODBC) 支援 TYPE_SCROLL_INSENSITIVE 或 TYPE_SCROLL_SENSITIVE。

限制 DELETE 影響列數 — 無直接語法

DB2 不支援 DELETE ... FETCH FIRST N ROWS ONLY 或 LIMIT 子句。

變通方案:游標定位刪除

-- 1. 宣告可更新游標
DECLARE c CURSOR FOR
  SELECT * FROM tab WHERE cond FOR UPDATE OF col1;

-- 2. 開啟游標
OPEN c;

-- 3. 迴圈 N 次
FETCH NEXT FROM c;
DELETE FROM tab WHERE CURRENT OF c;
-- 重複 N 次

-- 4. 關閉游標
CLOSE c;

需在程式碼中實作 (C/Java/COBOL 等),無法單純用單條 SQL 完成。

總結

需求可行性做法
查詢前 N 列✅ 直接支援FETCH FIRST N ROWS ONLY
查詢後 N 列✅ 需捲動游標FETCH LAST + FETCH PRIOR 迴圈
刪除前 N 列❌ 無直支援FOR UPDATE 游標 + WHERE CURRENT OF 迴圈
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved