[Oracle] order by un parametre

order by un parametre [Oracle] - SQL/NoSQL - Programmation

Marsh Posté le 10-07-2003 à 14:51:30    

Je récupere un parametre dans un formulaire pour savoir de quelle facon je vais ordonner le resultats de ma requete (utilisation XSL,XSQL,XML)
 
un combo box comme ceci

<td>Var Tri : </td>
     <td>
      <SELECT name="VT" style="font-size:8pt;">
       <OPTION value="5"><xsl:if test="$VT=5"><xsl:attribute name="selected"/></xsl:if>Nb CT</OPTION>
       <OPTION value="6"><xsl:if test="$VT=6"><xsl:attribute name="selected"/></xsl:if>Prime Ann</OPTION>
       <OPTION value="1"><xsl:if test="$VT=1"><xsl:attribute name="selected"/></xsl:if>Code Courtier</OPTION>
       <OPTION value="3"><xsl:if test="$VT=3"><xsl:attribute name="selected"/></xsl:if>Code Postal</OPTION>
       <OPTION value="10"><xsl:if test="$VT=10"><xsl:attribute name="selected"/></xsl:if>S/P</OPTION>
       <OPTION value="11"><xsl:if test="$VT=11"><xsl:attribute name="selected"/></xsl:if>Tendance Prime Ann.</OPTION>
      </SELECT>
     </td>


 
et ensuite quand je recupere mon parametre (donc un nombre parmi ceux proposé 5 6 3 1 10 11) je l'integre dans ma requete :

blablabla
order by :VT


 
le probleme c que ca ne trie rien du tout
alors que

blablabla
order by 3


fonctionne
 
g bien vérifié la valeur de mon parametre elle est bien égale a la valeur souhaité
g essayé d'utiliser to_number mais ca ne sert à rien...
je ne comprend pas...  :??:  
 
pourquoi est ce qu il ne prend pas le tri en compte???

Reply

Marsh Posté le 10-07-2003 à 14:51:30   

Reply

Marsh Posté le 10-07-2003 à 16:15:32    

Ben, essaye déja de savoir quelle requête tu envois à Oracle exactement, et fais gaffe a ne pas mélanger Php ou je n'sais quoi aux requêtes SQL.
Si Oracle ne fais pas le tri, c'est qu'il ne reçoit pas la bonne requête. Trouve quelle requête tu envois, et ta solution coulera de source...

Reply

Marsh Posté le 10-07-2003 à 16:47:03    

El_gringo a écrit :

Ben, essaye déja de savoir quelle requête tu envois à Oracle exactement, et fais gaffe a ne pas mélanger Php ou je n'sais quoi aux requêtes SQL.
Si Oracle ne fais pas le tri, c'est qu'il ne reçoit pas la bonne requête. Trouve quelle requête tu envois, et ta solution coulera de source...


 
g rien compri a ce que tu dis.. :sweat:  (comment on peut ne pas savoir quelle requete on execute??  :??:)  
je sais tres bien ce que j envoie comme requete et je ne fais pas de melange avec php
c t des requetes utilisés a travers php
mon pb c que le chiffre contenu dans mon parametre n'est pas interpreté correctement par Oracle...

Reply

Marsh Posté le 10-07-2003 à 17:04:53    

hop le fou a écrit :

Je récupere un parametre dans un formulaire pour savoir de quelle facon je vais ordonner le resultats de ma requete (utilisation XSL,XSQL,XML)
 
un combo box comme ceci

<td>Var Tri : </td>
     <td>
      <SELECT name="VT" style="font-size:8pt;">
       <OPTION value="5"><xsl:if test="$VT=5"><xsl:attribute name="selected"/></xsl:if>Nb CT</OPTION>
       <OPTION value="6"><xsl:if test="$VT=6"><xsl:attribute name="selected"/></xsl:if>Prime Ann</OPTION>
       <OPTION value="1"><xsl:if test="$VT=1"><xsl:attribute name="selected"/></xsl:if>Code Courtier</OPTION>
       <OPTION value="3"><xsl:if test="$VT=3"><xsl:attribute name="selected"/></xsl:if>Code Postal</OPTION>
       <OPTION value="10"><xsl:if test="$VT=10"><xsl:attribute name="selected"/></xsl:if>S/P</OPTION>
       <OPTION value="11"><xsl:if test="$VT=11"><xsl:attribute name="selected"/></xsl:if>Tendance Prime Ann.</OPTION>
      </SELECT>
     </td>


 
et ensuite quand je recupere mon parametre (donc un nombre parmi ceux proposé 5 6 3 1 10 11) je l'integre dans ma requete :

blablabla
order by :VT


 
le probleme c que ca ne trie rien du tout
alors que

blablabla
order by 3


fonctionne
 
g bien vérifié la valeur de mon parametre elle est bien égale a la valeur souhaité
g essayé d'utiliser to_number mais ca ne sert à rien...
je ne comprend pas...  :??:  
 
pourquoi est ce qu il ne prend pas le tri en compte???
 


En fait je ne pense pas que tu arrive à ce que tu veux de cette façon. Quand tu fait :  
order by 3
Oracle comprend qu'il doit ordonner par la troisième collone. Mais si tu fait order by :vs, il prend ton :vs non pas comme un numero de colonne mais comme une valeur independante, ou lcomme la valeur d'une colonne si tu veux.  
Si VS = 3, order by :VS va être equivalent à order by '3'  et non order by 3 ( je sais pas si c'est très clair ... ).

Reply

Marsh Posté le 10-07-2003 à 17:09:39    

Mais, ce qui me trouvle un peu, c'est qu'un order by, y a pas plus simple à utiliser. Pourquoi tu mets ":" avant "vs" ? Ta colone s'appelle ":vs" ? Parce qu'en mettant simplement le nom de ta colone, ça roule. Et sinon tu peux aussi mettre le n° de la colone, comme le dit monsieur la mèche !

Reply

Marsh Posté le 10-07-2003 à 17:27:40    

c koi qui lance la requête ?
 
certainement pas le XML.
 
donc tu génères la requête avec quel langage ?
 
tu peux pas générer une chaîne de caractères, avec la valeur de ta variable plutôt que d'envoyer une variable SQL ? (à priori, là à 9 chances sur 10, tu fait un "order by null" ce qui n'est pas près de marcher...

Reply

Marsh Posté le 11-07-2003 à 09:16:12    

El_gringo a écrit :

Mais, ce qui me trouvle un peu, c'est qu'un order by, y a pas plus simple à utiliser. Pourquoi tu mets ":" avant "vs" ? Ta colone s'appelle ":vs" ? Parce qu'en mettant simplement le nom de ta colone, ça roule. Et sinon tu peux aussi mettre le n° de la colone, comme le dit monsieur la mèche !


 
si je met : c tout simplement paske VT est un bind-param dans ma requete
j utilise une servlet xsql qui me permet d'utiliser des parametres dans ma requete et il fo mettre : devant une variable pour que celle ci comprenne
et oui je sais tres bien que avec le numéro de la colonne ca marche puisque c ce que je fais puisque la variable contient le numéro de la colonne sur laquelle je dois appliquer l'ordre...

Reply

Marsh Posté le 11-07-2003 à 09:19:21    

MagicBuzz a écrit :

c koi qui lance la requête ?
 
certainement pas le XML.
 
donc tu génères la requête avec quel langage ?
 
tu peux pas générer une chaîne de caractères, avec la valeur de ta variable plutôt que d'envoyer une variable SQL ? (à priori, là à 9 chances sur 10, tu fait un "order by null" ce qui n'est pas près de marcher...


 
j utilise une servlet xsql sous Oracle8i
en fait oui c ca le pb c que Oracle ne comprend pas mon parametre comme une chaine de caractere donc il ne prend pas la clause en compte
j aimerai bien générer une chaine de caractere mais to_char et to_number n'ont servi a rien (sans faire d'erreur d ailleur ce qui est étrange car les 2 sont passés...)
alors comment la générer cette chaine? je ne connais pas d autre solution...

Reply

Marsh Posté le 11-07-2003 à 14:28:06    

order by {@VT}
Par contre VT ne doit pas être déclarer dans le bind-param de ton doc XSQL.


Message édité par phnatomass le 11-07-2003 à 14:29:19
Reply

Marsh Posté le 11-07-2003 à 14:39:47    

phnatomass a écrit :

order by {@VT}
Par contre VT ne doit pas être déclarer dans le bind-param de ton doc XSQL.


effectivement ca marche tres bien comme ca...  :)  
 
question subsidiaire(je profite tu es la 1ere personne qui a l air de connaitre bien xsql qui repond  :D ): je voudrais en plus mettre l ordre ASC ou DESC selon la valeur d attribut mais c pas possible de mettre un decode apres la variable...
 
d ailleur a tu une reponse a :
http://forum.hardware.fr/forum2.ph [...] subcat=439
 
personne n a pu me repondre et je me suis contenté de la solution que g trouvé...
ya pas mieux?
merci  :jap:

Reply

Marsh Posté le 11-07-2003 à 14:39:47   

Reply

Marsh Posté le 11-07-2003 à 15:37:05    

Citation :

question subsidiaire(je profite tu es la 1ere personne qui a l air de connaitre bien xsql qui repond  :D ): je voudrais en plus mettre l ordre ASC ou DESC selon la valeur d attribut mais c pas possible de mettre un decode apres la variable...


Oracle ne le permet pas directement .
Même principe
ORDER BY {@VT} {@ordre_tri}

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed