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 :

ORACLE 10.1 : requête avec noms des champs dans une table


Sujet :

SQL Oracle

  1. #1
    Membre régulier Avatar de H.ile
    Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Janvier 2008
    Messages : 122
    Points : 76
    Points
    76
    Par défaut ORACLE 10.1 : requête avec noms des champs dans une table
    Aloha

    J'ai une requête toute bête :
    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
    19
    20
    21
    SELECT IN_IRIS.GID,
           IN_IRIS.GEOMETRY,
           "2006_IC_LOG_IRIS".UU1999,
           "2006_IC_LOG_IRIS".COM,
          ...,
           "2006_IC_LOG_IRIS".P06_RP_MIDUR,
           "2006_IRIS".IRIS,
           "2006_IRIS"."Région",
          ...,
           "2006_IRIS"."Population en 2006 (princ)",
           IN_IRIS."code",
           "2006_IC_ACT_IRIS".UU1999,
           ...,
           "2006_IC_ACT_IRIS".C06_ACTOCC15P_TCOM
      FROM ((A_REIMS.IN_IRIS IN_IRIS
             INNER JOIN "H.ile"."2006_IC_ACT_IRIS" "2006_IC_ACT_IRIS"
                ON (IN_IRIS."code" = "2006_IC_ACT_IRIS".IRIS))
            INNER JOIN "H.ile"."2006_IC_LOG_IRIS" "2006_IC_LOG_IRIS"
               ON (IN_IRIS."code" = "2006_IC_LOG_IRIS".IRIS))
           INNER JOIN "H.ile"."2006_IRIS" "2006_IRIS"
              ON (IN_IRIS."code" = "2006_IRIS".IRIS)
    Oui mais voilà j'ai aussi une table dans laquelle j'ai la correspondance entre le nom des champs des tables "H.ile"."2006_IC_ACT_IRIS", "H.ile"."2006_IC_LOG_IRIS" et un nom plus explicite.

    Comment faire pour que ma requête précédente utilise cette table pour renommer automatiquement les champs en allant chercher la correspondance dans ma table "H.Ile"."2006_INDICATEURS_IRIS"

    D'avance merci,

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous ne pouvez pas le faire en pur SQL.

    Vous pouvez par contre construire votre requête via une autre requête en chaîne de caractère et exécutez le tout dans un bloc PL/SQL.

  3. #3
    Membre régulier Avatar de H.ile
    Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Janvier 2008
    Messages : 122
    Points : 76
    Points
    76
    Par défaut
    Problème, je ne maîtrise pas le PL/SQL. Mais bon, ça peut se résoudre.
    Par contre, est-ce que je peux construire une "fonction" SQL à base de PL/SQL qui réaliserait cela ?
    Si oui, comment ? Pourrais-je ensuite appeler cette fonction dans mon sql pour renommer les champs ?

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Non, la partie nom de colonne n'est pas censée être facilement modifiée.

    Je vous rappelle que SQL est un langage déclaratif, qui s'appuie notamment sur les noms et le nombre de colonnes (les métadonnées).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select 1 as col1 from dual;
     
    COL1
    ----
    1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select 1 as (select 'col2' from dual) from dual;
    -- ORA-00923: mot-clé FROM absent à l'emplacement prévu
    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
    declare
        vls_requete varchar2(1000);
    begin
        for c_libelle_colonne in
        (
        select 'col2' as nom_col from dual
        )
        loop
           vls_requete := 'select 1 as ' || c_libelle_colonne.nom_col || ' from dual';
           -- execute immediate vls_requete;
           dbms_output.put_line(vls_requete);
        end loop;
    end;
    /
     
    -- select 1 as col2 from dual
    Tient d'ailleurs mnitu pourra peut-être aider ici, je n'ai pas réussi à utiliser une bind variable.

  5. #5
    Membre régulier Avatar de H.ile
    Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Janvier 2008
    Messages : 122
    Points : 76
    Points
    76
    Par défaut
    Merci pour ces explications.

    Je vais procéder autrement et droper mes tables pour les recréer directement avec les bons intitulés de champ.

    A bon entendeur.

  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
    Citation Envoyé par Waldar Voir le message
    ...Tient d'ailleurs mnitu pourra peut-être aider ici, je n'ai pas réussi à utiliser une bind variable.

    Il n’est pas possible d’utiliser une variable de binding pour ça comme il n’est pas possible d’utiliser la variable de binding pour préciser le nom de la table.

    Bind Variables
    When you embed an INSERT, UPDATE, DELETE, or SELECT SQL statement directly in your PL/SQL code, PL/SQL turns the variables in the WHERE and VALUES clauses into bind variables automatically. Oracle can reuse these SQL statement each time the same code is executed. To run similar statements with different variable values, you can save parsing overhead by calling a stored procedure that accepts parameters, then issues the statements with the parameters substituted in the appropriate places.

    You do need to specify bind variables with dynamic SQL, in clauses like WHERE and VALUES where you normally use variables. Instead of concatenating literals and variable values into a single string, replace the variables with the names of bind variables (prefixed by a colon) and specify the corresponding PL/SQL variables with the USING clause. Using the USING clause, instead of concatenating the variables into the string, reduces parsing overhead and lets Oracle reuse the SQL statements.

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

Discussions similaires

  1. Lister le nom des champs dans une table précise
    Par robyseb dans le forum Contribuez
    Réponses: 5
    Dernier message: 01/08/2012, 08h00
  2. Récupérer les noms des champs dans une requête
    Par Nerziel dans le forum Général Python
    Réponses: 1
    Dernier message: 14/09/2009, 11h29
  3. cherche requette pour trouver le nom des champs dans une table
    Par maverick56 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 12/07/2007, 10h28
  4. [MySQL] remplir un tableau avec les noms des champs d'une table
    Par solidaritok dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/04/2007, 13h47
  5. Réponses: 2
    Dernier message: 01/08/2006, 13h38

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