Oracle 10g Pagination
Posted by David Faber on February 28, 2012
A colleague of mine alerted me to the following example of pagination in Oracle 10g:
select * from (
select /*+ FIRST_ROWS(n) */
a.*
, ROWNUM rnum
, count(*) over() as total_rows
from (
/* your select statement goes here */
) a
) b
where b.rnum >= :start_row and b.rnum <= :end_row
This does have the advantage of working with an arbitrary SQL SELECT statement, but there is a somewhat simpler way of going about it if you know in advance what the SELECT statement will be:
SELECT * FROM (
SELECT your_columns, ROW_NUMBER() OVER (ORDER BY your_sort) AS rnum
, COUNT(*) OVER() AS total_rows
FROM your_table
ORDER BY your_sort
) WHERE rnum >= :start_row AND rnum <= :end_row
The key is that the value of your_sort must be the same in both places.

» Some statistics Search Smith said
[…] Oracle 10g Pagination […]