Oracle
 sql >> Base de données >  >> RDS >> Oracle

sql (oracle) pour sélectionner les 10 premiers enregistrements, puis les 10 suivants, et ainsi de suite

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