Salut,
je suis sur Oracle 10g , et j'aurais voulu juste une précision.

BoOn j'explique :
J'ai une requete (tres basique) dont le but est de faire une selection sur 1 critere , et de renvoyer les X 1eres lignes ( via un rownum) ordonnées !

Donc à priori la 1ere erreur ( ca je le savais mais c'est pas moi qui ai fait la requete ) ca a été de faire une requete du genre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
SELECT  ID  FROM TABLE T
where T.champs = XXXXXX
and rownum <= 10
order by ID
A priori le order by se fait apres le rownum donc pas bon du tout. (ouais j'ai pété des têtes parce que ca fait 6 mois que je le répete lol )

Mes questions sont les suivantes :
  1. Chez moi , ca a toujours marché, d'ou j'en deduis que mon select rownum me les renvoies tjours dans le bon ordre , y'a t il une raison a ca ? ( a part le pif et la chance sur 6 mois )
  2. Je compte remplacer la requete par qq chose du genre (que j'utilise souvent en fait ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT  ID FROM (
    SELECT ID  FROM TABLE T
    where T.champs = XXXXXX
    order by ID )
    where rownum <= 10
    Ca marche, je teste sur une base toute petite donc les écarts de cout et de temps sont super négligeables. Mais selon vous est ce que le temps d'exécution peut en souffrir ?
  3. là aussi c'est bon , je souhaiterais juste une confirmation ( j'ai comme un doute d'un coup [ouais c'est le matin ] ), est ce que je devrais pas écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  ID FROM (
    SELECT ID  FROM TABLE T
    where T.champs = XXXXXX
    order by ID )
    where rownum <= 10
    order by ID 




Pour info je précise que mon "rownum" peut changer ( la valeur 10 est parametrable et peut passer de 10 à 50000 ou + selon les souhaits )