無法利用下面語法取得 :
select *
from emp
where rownum >= n and rownum <= m;
解決方式, 如下 :
取回前 n 筆資料
-- 在 Oracle 12c 以前, 利用 subquery 與 rownum 實現 select b.* from (select a.* from emp a order by a.name ) b where rownum <= n; -- 在 Oracle 12c 以後, 利用 fetch 即可 select a.* from emp a order by a.name fetch first n rows only;
取回第 n ~ m 筆資料
-- 在 Oracle 12c 以前, 利用 subquery 與 rownum 實現 select * from (select rownum bRn , b.* from (select rownum aRn , a.* from emp a order by a.name ) b ) where bRn between n and m; -- 在 Oracle 12c 以後, 利用 fetch 與 offset 即可 select a.* from emp a order by a.name offset (n-1) rows -- 略過 n-1 筆, 也就是從第 n 筆開始 fetch next (m - n + 1) rows only; -- 取幾筆資料, n ~ m 共有 (m - n + 1) 筆
在 Oracle 12c 之後, 取回第 n ~ m 筆資料的語法, 是不是更為簡單、簡潔、明瞭.
更多關於 offset fetch 用法, 請參考 http://oracle-base.com/articles/12c/row-limiting-clause-for-top-n-queries-12cr1.php.