IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Fonction DECODE + type [12c]


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Points : 28
    Points
    28
    Par défaut Fonction DECODE + type
    Bonjour,

    je cherche actuellement à utiliser la fonction DECODE dans pour effectuer un tri :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select ...
    from ...
    where ...
    ORDER BY DECODE(:parametre, 'text', colone1, colone2)
    le problème est le suivant :

    Colone1 est un VARCHAR2
    Colone2 est un NUMBER

    la petite subtilité du décode veut que le type de retour soit celui du 3eme paramètre...

    du coup, lorsque la condition pour un tri sur la colone2 est OK, j'ai :

    1
    10
    11
    12
    13
    .....
    19
    2
    21
    22
    .....

    existe-t-il une astuce pour remédier a ce problème ?

    suis-je obligé de faire 2 requêtes en fonction du paramètre ?

    Merci d'avance pour vos répondes

  2. #2
    Membre habitué

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2008
    Messages : 110
    Points : 167
    Points
    167
    Par défaut
    Avez-vous essayer de convertir votre number avec TO_CHAR?

    Par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT ...
    FROM ...
    WHERE ...
    ORDER BY DECODE(:parametre, 'text', colone1, TO_CHAR(colone2))

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    Merci pour votre réponse, mais ceci ne fonctionne pas.

    Mon problème vien du fait que le type de sortie de mon DECODE est un VARCHAR2 dans le cas de la colone 2.

    alor que j'ai besoin qu'il me retourne un NUMBER....

    j'ai bien sur testé avec un TO_NUMBER à la place du TO_CHAR, mais cette fonction persiste à prendre le typage du 3eme paramètre.

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par geektoo Voir le message
    Avez-vous essayer de convertir votre number avec TO_CHAR?
    Déjà fait par Oracle en dessous de la table (coercition)!

  5. #5
    Membre habitué

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2008
    Messages : 110
    Points : 167
    Points
    167
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Déjà fait par Oracle en dessous de la table (coercition)!
    Oh ok! J'étais pas au courant, merci de l'information! J'étais sur qu'Oracle garderait son type.

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Avec Lpad ou deux decode

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    Bonjour mnitu,

    - Lpad : je ne voi pas du tout ou vous voulez en venir
    - 2 DECODE : j'ai plancher un peu dessus, et je bute sur le fait que le DECODE ne retournera qu'au final qu'un seul et meme type defini par le type du 3eme parametre (donc le second aussi).

    donc a moin qu'il existe une fonction qui me permette de changer mon type de retour en fonction de la valeur d'une variable .....

    j'ai peur d'etre condamner a faire un truc crado

  8. #8
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT ...
    FROM ...
    WHERE ...
    ORDER BY CASE :parametre WHEN 'text' THEN colone1 /*ELSE 'const'*/ END
    , CASE WHEN :parametre <> 'text' THEN colone2 /*ELSE 0*/ END

    EDIT :
    Ce que veut dire Mnitu, c'est que le problème de comparer des nombres avec to_char, c'est qu'on obtient '2' > '10'.
    Si tu fais LPAD(colonne, 10), tous tes nombres seront de la même longueur et :
    ' 2' sera bien inférieur à ' 10'.

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  9. #9
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    J'avais pensé à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORDER BY DECODE(:parametre, 'text', colone1, LPAD(colone2,5,'0'))
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ORDER BY DECODE(:parametre, 'text', colone1), 
                  DECODE(:parametre, 'text', To_Number(Null), colone2)

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    Un grand Merci a vous 2

    Je vais quand meme préférer la solution du case qui me semble plus propre et adapté à mon besoin. Mais j'ai bien aimé la solution du LPAD

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction du type y=
    Par vladskeeper dans le forum Bases de données
    Réponses: 2
    Dernier message: 29/12/2005, 18h54
  2. Réponses: 9
    Dernier message: 22/07/2005, 16h10
  3. Fonction de type between
    Par midnight77 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 01/04/2005, 14h51
  4. [LG]Resultat de fonction de type Record ?
    Par Mike888 dans le forum Langage
    Réponses: 10
    Dernier message: 24/01/2004, 22h48
  5. Fonction de type tableau
    Par Charles f dans le forum Langage
    Réponses: 5
    Dernier message: 04/08/2002, 14h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo