Solo hay una forma bastante complicada de hacer esto, lo cual es un verdadero dolor con Oracle. Simplemente deberían implementar una cláusula LIMIT/OFFSET...
El número de fila se asigna después la fila ha sido seleccionada por la cláusula where, por lo que un número de fila siempre debe comenzar con 1. where rownum > x
siempre se evaluará como falso.
Además, rownum se asigna antes de que se realice la clasificación , por lo que el número de fila no estará en el mismo orden que dice su pedido.
Puede solucionar ambos problemas con una subselección:
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
Si no necesita ordenar (pero solo entonces), puede simplificar a
select a,b,c, rn from
( select a,b,c, rownum rn from the_table where rownum < Y )
where rn > X