OVH Cloud OVH Cloud

Oracle : 50 1er enregistrements ?

4 réponses
Avatar
Yves
Est-il possible via une requête d'afficher les 50 premiers enregistrements
sous ORACLE ?
Car j'ai une erreur ...

Merci. Yves

4 réponses

Avatar
elecoest
"Yves" a écrit dans le message de news:

Est-il possible via une requête d'afficher les 50 premiers enregistrements
sous ORACLE ?



...where rownum < 51

Par contre le rownum s'execute avec un order by et avant un group by :-(

Autre Solution Oracle4WD qui gère les "limites" au sens MySQL.

--
Emmanuel
Avatar
Roumegou
Après mure réflexion, elecoest a écrit :
"Yves" a écrit dans le message de news:

Est-il possible via une requête d'afficher les 50 premiers enregistrements
sous ORACLE ?



...where rownum < 51

Par contre le rownum s'execute avec un order by et avant un group by :-(



et oui, c'est le truc incompréhensible de Oracle; Pas de LIMIT ou de
TOP.
Alors il faut faire un select sur le select

SELECT * from (select COLA,COLB,COLB FROM TABLE ORDER BY COLB)
where rownum<51


Autre Solution Oracle4WD qui gère les "limites" au sens MySQL.



--
Eric Roumégou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Manu
> Après mure réflexion, elecoest a écrit :
"Yves" a écrit dans le message de news:

Est-il possible via une requête d'afficher les 50 premiers
enregistrements sous ORACLE ?



...where rownum < 51

Par contre le rownum s'execute avec un order by et avant un group by
:-(



et oui, c'est le truc incompréhensible de Oracle; Pas de LIMIT ou de
TOP.



Pourquoi incompréhensible alors que nous sommes dans l'air du tout
ensembliste ?
J'avais un programme écrit en ancienne mode : je lis d'un coté, j'écris de
l'autre et je commit assez souvent pour ne pas remplir le RBS : 35 heures
pour générer 8 millions de lignes à partir de 2 millions avec un algo costo
entre les 2. Un "expert" 8i est venu, on a passé le biniou en ensembliste
(tout en requete) on est passé à moins de 6 heures.

Pour faire l'analogie, c'est le même rapport que l'on peut avoir entre un
programme écrit en hxxx et à partir de requetes. Par contre, pour revenir à
mon cas, nous avons du créer des tables temporaires dites de travail.
Pourquoi cette remarque ? Tout simplement pour dire que l'on ne peut pas
_tout_ faire en 1 seule requete.

@+
Avatar
Phil
> programme écrit en hxxx et à partir de requetes. Par contre, pour revenir


à
mon cas, nous avons du créer des tables temporaires dites de travail.
Pourquoi cette remarque ? Tout simplement pour dire que l'on ne peut pas
_tout_ faire en 1 seule requete.



Bonjour,

J'ai bien apprécié cette déclaration.
Après presque 25 ans de métier comme concepteur, on a forcément une
perception plus "détaillée" de la programmation puisqu'on a connu dès le
départ des contraintes de toutes sortes avec très peu d'outils pour
travailler.

J'ai souvent vu des exemples de requêtes sur ce forum qui englobent tout
d'une seule traite et j'avais des doutes à chaque fois. Pourquoi? Parce que
même en FoxPro dont les requêtes SQL sont d'une vitesse époustouflantes à
l'origine, nous avons dû dans de nombreux cas (par fanatisme de vitesse sur
de grandes quantités) disséquer les requêtes en plusieurs étapes avec
l'utilisation de fichiers temporaires afin d'obtenir des gains de vitesse
considérable.

Par exemple, une opération complexe de 50 minutes qui passe à 2 minutes.
Nous avons même eu une opération de traitement de grandes quantités il y a
plusieurs années (sur des 80286) qui est passé de plus de 2 heures en moins
de 20 secondes - juste en séparant les étapes dans des fichiers temporaires
avec quelques nouveaux index bien placés. La commande SQL d'origine avait
été conçu par un jeune programmeur et était tout à fait techniquement
correcte... écrite d'une seule traite.

Nouveau en Windev 8 (que j'apprécie de plus en plus), je suis ravi de
constater que les bonnes vieilles méthodes d'optimisation acquises en SQL de
FoxPro seront encore applicables en WD8.

--
Cordialement,

Réal Philippon
Programmation Ultra Ltée -o- www.ultra.ca

"Manu" a écrit dans le message de
news:cd55c2$63i$
> Après mure réflexion, elecoest a écrit :
>> "Yves" a écrit dans le message de news:
>>
>>> Est-il possible via une requête d'afficher les 50 premiers
>>> enregistrements sous ORACLE ?
>>
>> ...where rownum < 51
>>
>> Par contre le rownum s'execute avec un order by et avant un group by
>> :-(
>
> et oui, c'est le truc incompréhensible de Oracle; Pas de LIMIT ou de
> TOP.

Pourquoi incompréhensible alors que nous sommes dans l'air du tout
ensembliste ?
J'avais un programme écrit en ancienne mode : je lis d'un coté, j'écris de
l'autre et je commit assez souvent pour ne pas remplir le RBS : 35 heures
pour générer 8 millions de lignes à partir de 2 millions avec un algo


costo
entre les 2. Un "expert" 8i est venu, on a passé le biniou en ensembliste
(tout en requete) on est passé à moins de 6 heures.

Pour faire l'analogie, c'est le même rapport que l'on peut avoir entre un
programme écrit en hxxx et à partir de requetes. Par contre, pour revenir


à
mon cas, nous avons du créer des tables temporaires dites de travail.
Pourquoi cette remarque ? Tout simplement pour dire que l'on ne peut pas
_tout_ faire en 1 seule requete.

@+