SELECT emp_no FROM emp
WHERE ROWNUM < 10
ORDER BY emp_no;
ROWNUM 是在資料擷取階段即時產生的偽欄位,非儲存值。
SELECT emp_no FROM (
SELECT emp_no FROM emp ORDER BY emp_no
) WHERE ROWNUM < 10;
-- Offset/Fetch (ANSI SQL 標準)
SELECT emp_no FROM emp
ORDER BY emp_no
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;
-- 12c 前通用寫法 (支援任意頁)
SELECT * FROM (
SELECT a.*, ROWNUM rn FROM (
SELECT emp_no FROM emp ORDER BY emp_no
) a WHERE ROWNUM <= :end_row
) WHERE rn >= :start_row;
| 特性 | 說明 |
|---|---|
| 賦值時機 | 資料源擷取時,WHERE 過濾前 |
| 值的範圍 | 從 1 開始遞增 |
WHERE ROWNUM = 1 | 有效 (首筆) |
WHERE ROWNUM > 1 | 永無結果 (首筆被過濾,後續永無機會變 1) |
WHERE ROWNUM BETWEEN 5 AND 10 | 無效,同理 |