Existe apenas uma maneira bastante complicada de fazer isso, o que é uma verdadeira dor com a Oracle. Eles devem apenas implementar uma cláusula LIMIT/OFFSET...
O rownum é atribuído depois a linha foi selecionada pela cláusula where, de modo que um rownum deve sempre começar com 1.
where rownum > x
sempre será avaliada como false. Além disso, rownum é atribuído antes que a classificação seja feita , então o rownum não estará na mesma ordem que o seu pedido por say.
Você pode contornar os dois problemas com uma subseleção:
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 você não precisa ordenar (mas somente então), você pode simplificar para
select a,b,c, rn from
( select a,b,c, rownum rn from the_table where rownum < Y )
where rn > X