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 :

Concaténer une variable et un nom de colonne


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 42
    Points : 22
    Points
    22
    Par défaut Concaténer une variable et un nom de colonne
    Bonjour,

    Je suis entrain de faire un script SQL et j'aimerais concater un paramètre et le nom d'une colonne.

    exemple :

    l'utilisateur rentre la valeur 10, j'aimerais que dans ma requête j'ai la colonne myCol10 qui soit ramené. Si l'utilisateur entre 2 on me retourne le contenu de myCol2...

    Vulgairement j'aimerais savoir si qqch existe et qui fasse ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DEFINE mois = &m
    Select myCol+'&mois.'+_VALUE
    Merci par avance,
    Jérémy

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 802
    Points
    30 802
    Par défaut
    Il faut utiliser du SQL dynamique, avec la commande EXECUTE IMMEDIATE.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Merci pour ta réponse rapide.

    Mais pourrais tu me donner un exemple ? Car j'ai regardé sur internet mais je vois pas trop comment l'utiliser

    Merci par avance,

  4. #4
    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,

    Si tu n'en as que 12, tu peux faire avec CASE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT CASE '&mois.' WHEN 1 THEN myCol1_VALUE
                         WHEN 2 THEN myCol2_VALUE
                         ...  
                         WHEN 12 THEN myCol12_VALUE END
    FROM TaTable

    (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/

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Salut,

    J'ai fait en utilisant le CASE, mais il me retourne rien :$
    Il me met pas d'erreur mais me retourne le juste libellé de la colonne, mais avec aucun contenu...

    Une idée?

  6. #6
    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
    Je suppose que le CASE n'arrive pas à matcher...

    Tu peux essayer de rajouter un to_number ?
    (Genre : CASE to_number('&mois.') WHEN 1 THEN...)

    (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/

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Même avec le to_number il affiche rien.

    Par contre qd je change un condition après une des then ben il me sort une erreur .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CASE to_number('&mois.') WHEN 1 then SS.CAPACITESOUSCRITE1_VALUE 
                              WHEN 2 then SS.CAPACITESOUSCRITE2_VALUE 
                              WHEN 3 then SS.CAPACITESOUSCRITE3_VALUE
                              ...
                              WHEN 9 then SS.CAPACITESOUSCRITE9_VALUE 
                              WHEN 10 then SS.DATEFIN
                              WHEN 11 then SS.CAPACITESOUSCRITE11_VALUE 
                              WHEN 12 then SS.CAPACITESOUSCRITE12_VALUE 
                              END AS CAJ
    Lorsque j'exécute ca j'ai l'erreur suivante :

    Erreur à la ligne de commande : 15, colonne : 39
    Rapport d'erreur :
    Erreur SQL : ORA-00932: types de données incohérents ; attendu : NUMBER ; obtenu : DATE
    00932. 00000 - "inconsistent datatypes: expected %s got %s"
    *Cause:
    *Action:
    La ligne 15 est la ligne When 9 ....

  8. #8
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> create table t_num (t1 int, t2 int, t22 int);
     
    Table created
     
    SQL> define numcol='1'
    SQL> select t&numcol
      2  from t_num;
     
                                         T1
    ---------------------------------------
     
    SQL>

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Enfait je dois reformer cette colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SS.CAPACITESOUSCRITE9_VALUE
    Ce que j'aimerais faire c'est un SS.CAPACITESOUSCRITE + &maVar + _VALUE

    Je viens de tester ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DEFINE mois = &mois
    DEFINE endWord = '_VALUE'
    Select  SS.CAPACITESOUSCRITE&mois&endWord
    Ca a l'air de marcher, mais il y aurait pas plus joli et moins barbare? ^^

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

Discussions similaires

  1. [Débutant] utiliser variable pour le nom de colonne d'une procedure rowfilter
    Par Ashireon dans le forum VB.NET
    Réponses: 1
    Dernier message: 28/09/2012, 13h32
  2. Titre de colonne = texte concaténé à une variable
    Par debdev dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 12/06/2009, 14h23
  3. Réponses: 15
    Dernier message: 18/11/2008, 15h47
  4. Réponses: 4
    Dernier message: 11/10/2007, 18h35
  5. exporter une table sans le nom de colonnes ?
    Par vuldos dans le forum Access
    Réponses: 13
    Dernier message: 11/10/2004, 19h56

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