Jest na to tylko dość zawiły sposób, co jest prawdziwym bólem w przypadku Oracle. Powinni po prostu zaimplementować klauzulę LIMIT/OFFSET...
Numer wiersza zostaje przypisany po wiersz został wybrany przez klauzulę WHERE, tak że rownum musi zawsze zaczynać się od 1. where rownum > x
zawsze oceni się na fałsz.
Ponadto rownum zostaje przypisane przed zakończeniem sortowania , więc numer rzędu nie będzie w tej samej kolejności co twoje zamówienie przez mówi.
Możesz obejść oba problemy za pomocą podwyboru:
select a,b,c, rn from
( select a,b,c, rownum rn from
( select a,b,c from the_table where x = ? order by c)
where rownum < Y)
where rn > X
Jeśli nie musisz sortować (ale tylko wtedy), możesz uprościć
select a,b,c, rn from
( select a,b,c, rownum rn from the_table where rownum < Y )
where rn > X