lundi 3 mars 2008

Oracle : équivalent de la clause limit de MySQL

La clause LIMIT de MySQL est très pratique pour tout ce qui concerne la pagination... Seul petit problème, elle n'existe pas sous Oracle.

Voici donc un squelette d'une requête qui vous permettra d'avoir le même comportement :

SELECT *
FROM ( SELECT /*+ FIRST_ROWS(50) */
a.*, ROWNUM rnum
FROM (SELECT ROWNUM, user_id FROM user) a
WHERE ROWNUM <= 31050
)
WHERE
rnum >= 31000

Cette requête vous permet de sélectionner uniquement les "user_id" des enregistrements 31000 à 31050 de la table user...
Attention le commentaire est apparemment utile à Oracle pour améliorer le temps d'exécution...

2 commentaires:

Anonyme a dit…

"Attention le commentaire est apparemment utile à Oracle pour améliorer le temps d'exécution..."

Effectivement, c'est ce qu'on appelle les "hints" dans Oracle, des directives d'optimisation d'exécution de requêtes (à utiliser avec précaution) qui n'auront bientôt plus de secret pour toi avec ta certif Oracle Developer ;)

Pef

Alexandre Colson a dit…

Merci mon petit pef pour cette précision... J'attends avec impatience ton nouveau blog pour qu'on puisse partager ce genre de choses...