關聯式資料表本身沒有「前幾列」或「後幾列」的概念,順序只存在於 結果集 (Result Set) 中。若需刪除結果集的前 N 筆或後 N 筆,必須先定義排序,再透過游標操作。
FETCH FIRST N ROWS ONLY 限制查詢結果。FOR UPDATE OF 子句。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;
標準游標僅能向前,需使用 可捲動游標 (Scrollable Cursor):
DECLARE c1 SCROLL CURSOR FOR ...FETCH LAST FROM c1FETCH 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 筆」。