Il n'y a qu'une manière assez compliquée de le faire, ce qui est vraiment pénible avec Oracle. Ils devraient juste implémenter une clause LIMIT/OFFSET...
Le rownum est attribué après la ligne a été sélectionnée par la clause where, de sorte qu'un rownum doit toujours commencer par 1. where rownum > x
sera toujours évalué à faux.
De plus, rownum est attribué avant que le tri ne soit effectué , donc le rownum ne sera pas dans le même ordre que votre ordre par dit.
Vous pouvez contourner les deux problèmes avec une sous-sélection :
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 vous n'avez pas besoin de trier (mais seulement ensuite), vous pouvez simplifier pour
select a,b,c, rn from
( select a,b,c, rownum rn from the_table where rownum < Y )
where rn > X