C'è solo un modo piuttosto contorto per farlo, che è un vero problema con Oracle. Dovrebbero semplicemente implementare una clausola LIMIT/OFFSET...
Il rownum viene assegnato dopo la riga è stata selezionata dalla clausola where, quindi un rownum deve sempre iniziare con 1. where rownum > x
valuterà sempre come falso.
Inoltre, rownum viene assegnato prima che l'ordinamento sia terminato , quindi il rownum non sarà nello stesso ordine del tuo ordine di dice.
Puoi aggirare entrambi i problemi con una sottoselezione:
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
Se non hai bisogno di ordinare (ma solo allora), puoi semplificare in
select a,b,c, rn from
( select a,b,c, rownum rn from the_table where rownum < Y )
where rn > X