Programmers often retrieve big result set using queries and need to split them up in order to display the result correctly. Just replace the inner query with the original one see tag /* PUT YOUR MAIN QUERY */, and :UPPERBUOND, :LOWERBOUND with the boundary of the results you want to display.
SELECT *
FROM (
SELECT a.*, rownum rnum
FROM ( /* PUT YOUR MAIN QUERY */) a
WHERE rownum <= :UPPERBUOND
)
WHERE rnum >= :LOWERBOUND







isn’t it Tom Kyte way?