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.

oracle header

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.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Êtes-vous humain ? *