Archives mensuelles : janvier 2007

Cohabitation de ROWNUM et ORDER BY sous ORACLE

Dans le cadre d’une gestion en liste paginée et triable, on est tenté d’utiliser la fonctionnalité ROWNUM  pour la pagination (c’est à dire les n premiers résultats) et le ORDER BY pour le tri, sauf que sous ORACLE, le ORDER BY s’applique après le ROWNUM, donc si vous trier par nom les 25 premiers résultats d’une liste de 1000 noms, vous aurez en première page, les 25 premiers résultats de la requete non trié (c’est à dire un échantillon de A à Z) trié par nom…

Pour éviter ça, il faut encapsuler la première requète dans une deuxième :

SELECT * FROM
   (SELECT champs FROM table ORDER BY champ_a_trier)
WHERE ROWNUM < 25;

Sources : http://archives.postgresql.org/pgsql-general/2001-07/msg01243.php