ORACLE : Simuler la clause LIMIT de MySQL avec la colonne ROWNUM
La clause LIMIT (utilisable avec le SGBDR MySQL et avec beaucoup d’autres) n’existe pas sous Oracle. Il est toutefois possible de simuler le fonctionnement de « LIMIT X, Y » avec la colonne ROWNUM.
La clause LIMIT
Sous MySQL, la clause LIMIT permet de limiter les résultats d’une requête.
Par exemple, la requête suivante affichera 30 enregistrements à partir du vingtième :
SELECT * FROM test LIMIT 19,30
La colonne ROWNUM
Sous Oracle, la clause LIMIT n’existe pas. Il existe toute fois une (fausse) colonne « ROWNUM ».
Cette colonne est créée automatiquement lorsqu’on la sélectionne. Initialisée à 1 (peu importe l’ordre des enregistrements), elle s’incrémente à chaque ligne.
Testez le comportement de la colonne avec cette requête (l’utilisation de l’alias de table permet de sélectionner tous les champs de la table) :
SELECT ROWNUM, T.* FROM TEST T WHERE ROWNUM < 10
Les enregistrements 1 à 9 seront affichés.
La requête
En l’état, la requête ci dessus ne permet pas de simuler exactement le comportement de la clause LIMIT puisque l’opérateur BETWEEN ne fonctionne pas.
Afin de simuler exactement le comportement de la clause LIMIT, il est nécessaire d’imbriquer notre requête dans une requête parente. Avec la création d’un alias sur la colonne ROWNUM, la requête parente nous permettra d’utiliser l’opérateur BETWEEN sur la colonne.
SELECT * FROM ( SELECT ROWNUM as compteur, T.* FROM TEST T ) WHERE compteur BETWEEN 10 and 20
Ainsi, le comportement de la clause LIMIT X, Y est reproduit grâce à la colonne ROWNUM.
Article rédigé avec l’aide de Julien TAUBENHAUS.