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 :

Convertir une chaine en nom de colonne


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 33
    Points : 17
    Points
    17
    Par défaut Convertir une chaine en nom de colonne
    Bonjour,

    J'ai 2 tables qui ont par exemple les champs suivants :
    - TAB_NUMPARAM : id, name, param, num_param
    - TAB_DATA : id, valparam1, valparam1, valparam2, valparam3, valparam4... valparam50

    Je souhaiterais faire une extraction d'une colonne valparamX de la table TAB_DATA en fonction de la valeur du champ num_param de la table TAB_NUMPARAM.

    En gros, faire une requête du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select 'valparam' || num_param from TAB_DATA, TAB_NUMPARAM...
    Savez-vous si c'est possible ? Avez-vous une solution ?

    Merci
    Breizou.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 110
    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 110
    Points : 28 447
    Points
    28 447
    Par défaut
    C'est possible à condition d'utiliser la commande EXECUTE IMMEDIATE pour lancer la commande construite dans une chaine de caractères.

    Une (bien) meilleure solution serait d'adopter une structure normalisée pour la table TAB_DATA (id, numparam, valparam)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    Merci pour ta réponse !

    Hélas, je ne peux pas normaliser la table.
    Pour le execute immediate, je ne peux pas l'utiliser car c'est une requête d'extraction SELECT que je dois faire. pas de fonction PL/SQL.

    Je suis actuellement obligé d'utiliser 50 case / when...

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 110
    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 110
    Points : 28 447
    Points
    28 447
    Par défaut
    C'est une nouvelle démonstration qu'une modélisation incorrecte conduit à des requêtes complexes

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

    Même si c'est une extraction dont tu as besoin, tu peux utiliser du SQL Dynamique : soit en utilisant dans ton PL/SQL du ult_file ou du dbms_output, soit en "spoolant" la requête générée dans un fichier que tu exécutes ensuite pour réaliser l'extraction.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    Merci pour vos réponses mais je ne peux faire qu'une requête SQL, pas de pl/sql.
    Il s'agit d'un vieux projet avec des requetes SQL stockées dans un répertoire qui sont appellées par un programme écrit en C++.
    Ma seul option est hélas les 50 case / when.

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 110
    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 110
    Points : 28 447
    Points
    28 447
    Par défaut
    Si ça simplifie ton travail, tu peux aussi passer par une vue qui normalise la structure de ta table :
    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
    17
    18
    CREATE VIEW tab_data_nrm
    AS 
        SELECT  id
            ,   1           AS numparam
            ,   valparam1   AS valparam
        FROM    tab_data
    UNION
        SELECT  id
            ,   2
            ,   valparam2
        FROM    tab_data
    UNION
        ...
    UNION
        SELECT  id
            ,   50
            ,   valparam50
        FROM    tab_data

Discussions similaires

  1. Convertir une chaine en nom d'objet
    Par Sterne dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 09/11/2011, 10h07
  2. [Toutes versions] [VBA] Convertir une chaine en Range pour une sélection de colonnes
    Par Aurelangelo dans le forum Macros et VBA Excel
    Réponses: 34
    Dernier message: 14/04/2009, 15h37
  3. Convertir une chaine de caractère en nom de controle
    Par craesys dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/08/2008, 18h57
  4. Réponses: 6
    Dernier message: 14/06/2006, 15h27
  5. Convertir une chaine en format heure
    Par Lars dans le forum ASP
    Réponses: 3
    Dernier message: 24/05/2005, 11h44

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