Socket 傳輸限制 5000 字元,需將大量查詢結果分批傳輸。直接使用 ROWNUM 遭遇兩大問題:ROWNUM > N 永無結果、結合 ORDER BY 時順序不穩定。
ROWNUM 在 WHERE 階段產生,ROWNUM > 5 導致第一行即被過濾,後續行永無機會獲得 ROWNUM=1。ORDER BY 在 ROWNUM 分配後執行,導致顯示順序與實際分頁邏輯錯位。SELECT *
FROM (
SELECT ROWNUM sn, t.*
FROM (
SELECT * FROM table_name ORDER BY rowid
) t
)
WHERE sn > 5 AND sn <= 10;
ORDER BY ROWID:ROWID 為物理位址唯一且不變,保證排序穩定、無重複/遺漏。ROWNUM 連續序號 sn。sn BETWEEN start AND end 精準切片。SELECT * FROM table_name ORDER BY rowid
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;
待後續壓力測試驗證大資料量下效能表現,但邏輯正確性已經過基本驗證。