OVH Cloud OVH Cloud

SQL - ORACLE -LIMIT

1 réponse
Avatar
EBille
Bonjour,
Sauf erreur... la clause LIMIT (0,30) si pratique pour paginer les
r=E9sultats, n'est pas disponible sous ORACLE.
Ma solution en PHP c'est de stocker le r=E9sultat de la requete dans
une variable de SESSION de type tableau, puis d'afficher page par page
=E0 la demande en calculant l'indice pointant dans le tableau.
Et vous, comment faites-vous ?
EB

1 réponse

Avatar
Patrick Mevzek
Le Wed, 11 Oct 2006 21:46:08 +0200, Fred Brouard - SQLpro a écrit :
La bonne façon de gérer le page par page c'est d'utiliser les curseurs.
Malheureusement, sauf exceptions, ce n'est pas possible dans le cadre du
web.



Si par proc stock... n tables temporaires !



Bonjour le ménage derrière.

il y a beaucoup plus intelligent en respectant la norme SQL:2003. Je
t'invite à lire mon bouquin (que tes étudiants doivent peut être lire en
cachette... !;-) aux pages 145/146, tu y decouvrira les fonction de
fenêtrage sui sont déjà utilisées par DB2 ou SQL Server 2005.



Désolé, personnellement je propose des solutions
1) qui fonctionnent aujourd'hui et pas dans 10 ans (compte tenu du temps
d'arrivée des nouveautés théoriques dans SQL)
2) qui fonctionnent partout et pas dans un SGBDR plutôt q'un autre.

Ainsi pour paginer il suffit de faire :

1) Pagination par bloc de ligne controlé (les lignes retournées sont
controlées dans le filtre WHERE) :
SELECT *
FROM (SELECT ROW_NUMBER() OVER(ORDER BY USR_ID) RNUM,
USR_ID, USR_NOM, USR_PRENOM,
FROM T_UTILISATEUR_USR) T
WHERE RNUM BETWEEN 10 AND 19
Ici on retourne les lignes numérotées 10 à 19.



Non, les résultats ne seront pas stables.

2) Pagination par nombre de page (le nombre de page est fixé, le nombre
de ligne inconnu, la page retournée est contrôlée dans le filtre
WHERE) : SELECT *
FROM (SELECT NTILE(25) OVER(ORDER BY USR_ID) NTL,
USR_ID, USR_NOM, USR_PRENOM,
FROM T_UTILISATEUR_USR) T
WHERE NTL = 7
Ici on fixe le nombre de page à 25 et l'on retourne la page 7



Idem.

--
Patrick Mevzek . . . . . . Dot and Co (Paris, France)
<http://www.dotandco.net/> <http://www.dotandco.com/>