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 :

récuperer les noms de colonnes passés dans la SELECT


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut récuperer les noms de colonnes passés dans la SELECT
    Messieurs Dames, bonjour.

    Question simple, mais réponse sans doute plus complexe :
    J'aimerai récupérer les noms de colonnes d'une requête quelconque comme, par exemples :


    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * FROM Table1
    SELECT truc, machin, bidule, FROM Table2
    SELECT truc, chose FROM Table1, Table2
    SELECT sum(leNombreDeMachins) as laSomme FROM Table12Mon
    but est donc de récupérer les alias des colonnes renvoyées par la requête, sachant que cette dernière peut aller taper dans plusieurs tables avec des jointures dans tous les sens et qu'elle peut comporter des champs nommés (alias) n'importe où...

    Alors ? Possible ou je rêve ?

    N.B. : je travaille sur Quick Test Pro de HP

    Merci et bonne journée à vous.

  2. #2
    Membre éclairé Avatar de macben
    Inscrit en
    Mars 2004
    Messages
    546
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2004
    Messages : 546
    Par défaut
    Bonjour,

    Je ne sais pas si c'est que je ne suis pas bien réveillé ou pas, mais personnellement je ne comprend pas ce que tu veux faire.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut
    Citation Envoyé par macben Voir le message
    Bonjour,

    Je ne sais pas si c'est que je ne suis pas bien réveillé ou pas, mais personnellement je ne comprend pas ce que tu veux faire.

    Ex:
    si je fais : Select truc,machin,bidule from table
    je voudrais une astuce qui me renvoie les noms de mes colonnes à savoir : truc et machin et bidule

    et ainsi de suite ...

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous pouvez interroger les vues systèmes contenant les méta-données, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from sys.user_tab_columns;

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Vous pouvez interroger les vues systèmes contenant les méta-données, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from sys.user_tab_columns;
    Merci pour ta reponse mais je la trouve trop vague.
    je sais pas moi s'il ya un truc qui dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select usr.Column_name 
    , t.login 
    ,t.password 
    from table t
    ,user_tab_columns usr 
    Where (jointure que j'ignore !!)
    et à la fin j'aurais un resultat comme par ex :

    Column_name | login | password
    login | log1 | pass1
    password |log2| pass2

    Pour moi je peux bien récuperer les colonnes d'une table quelconque mais mon intérêt c'est de récuperer que les colonnes passées dans le SELECT et qui dependent de ma table à moi.

    j'espere que j'etais bien clair !!

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    C'est incohérent ce que vous demandez.

    Que voulez-vous voir apparaître si vous avez une table comportant cinq colonnes et deux lignes ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut
    Citation Envoyé par Waldar Voir le message
    C'est incohérent ce que vous demandez.

    Que voulez-vous voir apparaître si vous avez une table comportant cinq colonnes et deux lignes ?
    Oui peut être c'est incohérent et flou mais bon
    En fait pour la premiere ligne je voudrais avoir mes 5 noms de colonnes
    et dans la deuxieme,troisieme etc les valeurs associé.

    Franchement moi aussi je ne sais pas comment mon resultat sera representé mais l'essentiel pour moi c'est de voir apparaitre mes noms de colonnes,pour pouvoir les manipuler après.

  8. #8
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Voulez-vous tout simplement ce qu'on voit naturellement dans SQL*Plus, c'est à dire les en-têtes de colonnes (prenant en compte les alias) et les données ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> select empno num, ename nom, mgr, sal salaire from scott.emp;
     
           NUM NOM               MGR    SALAIRE
    ---------- ---------- ---------- ----------
          7369 SMITH            7902        800
          7499 ALLEN            7698       1600
          7521 WARD             7698       1250
          7566 JONES            7839       2975
          7654 MARTIN           7698       1250
    Si ce n'est que ça, c'est au niveau du paramétrage de votre outil qu'il faut creuser.
    Et sinon il faut essayer d'être plus clair dans votre besoin !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut
    Citation Envoyé par Pomalaix Voir le message
    Voulez-vous tout simplement ce qu'on voit naturellement dans SQL*Plus, c'est à dire les en-têtes de colonnes (prenant en compte les alias) et les données ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> select empno num, ename nom, mgr, sal salaire from scott.emp;
     
           NUM NOM               MGR    SALAIRE
    ---------- ---------- ---------- ----------
          7369 SMITH            7902        800
          7499 ALLEN            7698       1600
          7521 WARD             7698       1250
          7566 JONES            7839       2975
          7654 MARTIN           7698       1250
    Si ce n'est que ça, c'est au niveau du paramétrage de votre outil qu'il faut creuser.
    Et sinon il faut essayer d'être plus clair dans votre besoin !


    Oui je croi que je dois creuser différemment parceque là je ne peux pas manipuler les noms de colonnes comme des VALEURS.

    (coté visuel ça ne m'intersse pas !!),,,,j'avoue que je n'ai pas bien expliqué le truc surtout dans ma derniere réponse.

    Merci Pomalaix

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il faudrait surtout expliquer ce que vous voulez en faire, si vous avez beaucoup de tables à extraire de cette façon, si vous êtes prêt à perdre tous les typages de vos données pour "ça".

  11. #11
    Membre éprouvé
    Inscrit en
    Mai 2010
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 107
    Par défaut
    Hello,

    Je ne comprend pas bien le problème, mais un moyen pour réutiliser les noms de colonnes serait (par exemple) de les mettre dans des variables.

    Un exemple rapide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    WITH T1 AS (
    SELECT 1 AS A, 2 AS B, 3 AS C FROM DUAL UNION ALL
    SELECT 2 AS A, 4 AS B, 6 AS C FROM DUAL UNION ALL
    SELECT 3 AS A, 6 AS B, 9 AS C FROM DUAL UNION ALL
    SELECT 4 AS A, 8 AS B, 12 AS C FROM DUAL
    ) 
    SELECT '&&col1', '&&col2' 
    FROM T1
    ORDER BY '&&col2' DESC, '&&col1';
    Lorsque tu lances cette requête, la possibilité d'introduire des valeurs (ici tu ne pourra introduire que A, B, ou C) pour col1 et col2 te sera proposée.

    Il est également possible de définir les valeurs de ces variables dans ton script avec la commande (SQL Plus) "def".

    Bien à toi,

  12. #12
    Expert confirmé 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
    Par défaut
    Je pense que la réponse la plus proche à votre question est:
    Example 8: Describe Columns

    This can be used as a substitute to the SQL*Plus DESCRIBE call by using a SELECT * query on the table that you want to describe.
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    DECLARE
      c           NUMBER;
      d           NUMBER;
      col_cnt     INTEGER;
      f           BOOLEAN;
      rec_tab     DBMS_SQL.DESC_TAB;
      col_num    NUMBER;
      PROCEDURE print_rec(rec in DBMS_SQL.DESC_REC) IS
      BEGIN
        DBMS_OUTPUT.NEW_LINE;
        DBMS_OUTPUT.PUT_LINE('col_type            =    '
                             || rec.col_type);
        DBMS_OUTPUT.PUT_LINE('col_maxlen          =    '
                             || rec.col_max_len);
        DBMS_OUTPUT.PUT_LINE('col_name            =    '
                             || rec.col_name);
        DBMS_OUTPUT.PUT_LINE('col_name_len        =    '
                             || rec.col_name_len);
        DBMS_OUTPUT.PUT_LINE('col_schema_name     =    '
                             || rec.col_schema_name);
        DBMS_OUTPUT.PUT_LINE('col_schema_name_len =    '
                             || rec.col_schema_name_len);
        DBMS_OUTPUT.PUT_LINE('col_precision       =    '
                             || rec.col_precision);
        DBMS_OUTPUT.PUT_LINE('col_scale           =    '
                             || rec.col_scale);
        DBMS_OUTPUT.PUT('col_null_ok         =    ');
        IF (rec.col_null_ok) THEN
          DBMS_OUTPUT.PUT_LINE('true');
        ELSE
          DBMS_OUTPUT.PUT_LINE('false');
        END IF;
      END;
    BEGIN
      c := DBMS_SQL.OPEN_CURSOR;
     
      DBMS_SQL.PARSE(c, 'SELECT * FROM scott.bonus', DBMS_SQL.NATIVE);
     
      d := DBMS_SQL.EXECUTE(c);
     
      DBMS_SQL.DESCRIBE_COLUMNS(c, col_cnt, rec_tab);
     
    /*
     * Following loop could simply be for j in 1..col_cnt loop.
     * Here we are simply illustrating some of the PL/SQL table
     * features.
     */
      col_num := rec_tab.first;
      IF (col_num IS NOT NULL) THEN
        LOOP
          print_rec(rec_tab(col_num));
          col_num := rec_tab.next(col_num);
          EXIT WHEN (col_num IS NULL);
        END LOOP;
      END IF;
     
      DBMS_SQL.CLOSE_CURSOR(c);
    END;
    /

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut
    Citation Envoyé par OracleFan Voir le message
    Hello,

    Je ne comprend pas bien le problème, mais un moyen pour réutiliser les noms de colonnes serait (par exemple) de les mettre dans des variables.

    Un exemple rapide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    WITH T1 AS (
    SELECT 1 AS A, 2 AS B, 3 AS C FROM DUAL UNION ALL
    SELECT 2 AS A, 4 AS B, 6 AS C FROM DUAL UNION ALL
    SELECT 3 AS A, 6 AS B, 9 AS C FROM DUAL UNION ALL
    SELECT 4 AS A, 8 AS B, 12 AS C FROM DUAL
    ) 
    SELECT '&&col1', '&&col2' 
    FROM T1
    ORDER BY '&&col2' DESC, '&&col1';
    Lorsque tu lances cette requête, la possibilité d'introduire des valeurs (ici tu ne pourra introduire que A, B, ou C) pour col1 et col2 te sera proposée.

    Il est également possible de définir les valeurs de ces variables dans ton script avec la commande (SQL Plus) "def".

    Bien à toi,

    Je te remercie mnitu de ton effort je creuserai votre proposition ce soir

    Oui OracleFan merci bien, en fait j'avais déjà pensé à ce que vous m'avez proposé mais d'un autre angle de vue :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select 'login' login,'password' password from dual
    union all
    select login, password from user_account where rownum <=2;
    c'est le fait de créer des alias à partir de la table dual.


    Peut être ca resoudera le probleme mais ce ne sera ni pratique ni efficace parceque là je dois toujours rajouter ce bloc de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select 'login' login,'password' password from dual
    union all
    et ca dependera de chaque requete(càd que je serai obligé de traiter chaque requete à part )moi je reflechie à un truc qui peut fonctionner d'une maniere dynamique sans devoir faire des retouche !!


    Aussi si vous voulez, je pense à utiliser une table comme : dba_tab_columns avec laquelle on peux manipuler les colonnes d'une table quelconque mais le probleme c'est que je ne sais pas la nature de la jointure entre cette table et toute autre table de ma base de données.
    par ex si on fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select column_name from dba_tab_columns where upper(table_name)='PRODUCT';
    on aura toutes les colonnes de ma table 'product'.


    En revanche moi je n'ai intérêt qu'aux colonnes de ma table 'product' qui sont passées dans le select : ex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select product_id,title from product
    .


    mon but c'est qu'à la fin je puisse construire un petit beau tableau dont la premiere ligne sera consacré au noms des colonnes passée dans mon SELECT
    et les autres lignes qui suivent pour les valeurs recupereés avec la requete !!

    je crois pas je pourrais desormais être plus clair que ça

  14. #14
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous n'avez toujours pas indiqué la façon dont vous allez utiliser ce résultat.
    Un fichier Excel, alimenter une autre application, faire une impression papier ?

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Vous n'avez toujours pas indiqué la façon dont vous allez utiliser ce résultat.
    Un fichier Excel, alimenter une autre application, faire une impression papier ?
    Affecter le resultat de la requete à un tableau. (je l'ai déjà dit )

    Dans ce resultat on trouvera ce que la requête va me cracher (les noms de colonnes ainsi que les autres valeurs).

    c'est pas la façon dont je vais utiliser le résultat qui m'embête plutôt d'y recuperer les noms de colonnes dans le resultat.

  16. #16
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Donc l'utilisation finale c'est d'affecter à un tableau.
    Et puis c'est tout ?

  17. #17
    Membre éprouvé
    Inscrit en
    Mai 2010
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 107
    Par défaut
    Hello first-card,

    Le principe des ALIAS et des variables n'est pas vraiment pareil. Est-ce que tu peux faire un scénario de ce que tu as, ce que tu traites et avec quoi et ce que tu veux au final ?

    Parce que je n'ai rien compris

    Tu fais un script que tu lances au travers d'un logiciel ?

Discussions similaires

  1. [Débutant] Ajouter les noms de colonnes/lignes dans un Pop-up menu
    Par MATHVIP dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 17/04/2015, 10h07
  2. Récuperer les nom d'ordinateur dans un réseau
    Par samirmember dans le forum Web & réseau
    Réponses: 5
    Dernier message: 29/04/2010, 10h59
  3. [MySQL] decalage dans les nom des colonnes avec les checkbox
    Par tortue_22 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/04/2009, 12h58
  4. Réponses: 2
    Dernier message: 03/09/2008, 17h14
  5. Changer les noms de colonnes dans un formulaire
    Par cakeby dans le forum Access
    Réponses: 1
    Dernier message: 06/01/2006, 21h32

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