Existe-t-il un moyen de faire en sorte qu'une Oracle
requête se comporte comme si elle contenait une MySQL limit
clause?
Dans MySQL
, je peux le faire:
select *
from sometable
order by name
limit 20,10
pour obtenir le 21e au 30e rangs (sauter les 20 premiers, donner les 10 suivants). Les lignes sont sélectionnées après le order by
, donc ça commence vraiment par le 20ème nom par ordre alphabétique.
Dans Oracle
, la seule chose que les gens mentionnent est la rownum
pseudo-colonne, mais elle est évaluée avant order by
, ce qui signifie ceci:
select *
from sometable
where rownum <= 10
order by name
renverra un ensemble aléatoire de dix lignes ordonnées par nom, ce qui n'est généralement pas ce que je veux. Il ne permet pas non plus de spécifier un décalage.
ORDER BY
. C'est tout l'intérêt de commander en premier. Si les données sous-jacentes changent et que votre jeu de résultats change à cause de cela, alors pourquoi ne pas montrer à l'utilisateur les résultats mis à jour au lieu d'informations obsolètes? De plus, la gestion de l'État est un fléau à éviter autant que possible. C'est une source constante de complications et de bugs; c'est pourquoi la fonctionnalité devient si populaire. Et quand sauriez-vous expirer la totalité du jeu de résultats en mémoire? Sur le Web, vous n'avez aucun moyen de savoir quand l'utilisateur quitte.