資料表本質是無序集合 (Relation);只有 結果集 (Result Set) 才有順序概念 (依 ORDER BY 決定)。
SELECT * FROM tab ORDER BY col FETCH FIRST N ROWS ONLY;
DECLARE c SCROLL CURSOR FOR SELECT * FROM tab ORDER BY col;OPEN c;FETCH LAST FROM c; 定位至最後一列N-1 次 FETCH PRIOR FROM c; 向前捲動標準 SQL 游標操作,需應用程式 (JDBC/CLI/ODBC) 支援 TYPE_SCROLL_INSENSITIVE 或 TYPE_SCROLL_SENSITIVE。
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 迴圈 |