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 :

Select avec nom de table dynamique


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 237
    Par défaut Select avec nom de table dynamique
    Bonjour,

    Je travaille sur une base 9i et souhaiterai effectuer le traitement en SQL.

    Est-il possible, à votre avis, de créer une requête avec un nom de table récupéré dans un champ d'une table temporaire ?

    J'ai vu qu'il existait "SQL dynamique" mais j'ai l'impression qu'il ne fonctionne que sous PL/SQL.

    En vous remerciant d'avance.
    Boutss

  2. #2
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Par défaut
    Bonjour,

    A mon avis, le plus simple c'est de faire une procedure pl avec un curseur sur ta table temporaire et de faire une jolie boucle avec un execute immediate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    declare 
    cursor machin
    is select ma_colonne from ma_table;
    begin
    for i in machin loop
    execute immediate 'select * from ' || i.ma_colonne;
    end loop;
    end;
    It isn't that they can't see the solution, it's that they can't see the problem.
    Mes Articles et Traductions (Microstrategy, Css et Javascript)
    Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.

  3. #3
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Tu peux également faire quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    set head off
    set feed off
    spool maRequete.sql
    select 'select * from ' || colTable ';'
    from maTable;
    spool off
    @maRequete

  4. #4
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Encore plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    COL NOMTAB NOPRINT NEW_VALUE NOMTAB;
    SELECT 'dual' NOMTAB FROM dual; -- A adapter ;)
    select * from &NOMTAB;
    A+

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Citation Envoyé par chrifo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    COL NOMTAB NOPRINT NEW_VALUE NOMTAB;
    Pourrais-tu m'expliquer cette ligne s'il te plait ?
    Je comprends que tu déclares une variable nommée NOMTAB mais même en lisant la doc sur SQLPlus, j'ai du mal à utiliser COL...

  6. #6
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Le plus souvent, COL (ou COLUMN) est utilisé pour formatter des sorties :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    COL BIDULE FORMAT 99.99
    select 1/3 BIDULE from DUAL;
    Avec NEW_VALUE, on crée simplement une variable de substitution, comme avec define, mais cela permet de chercher une valeur dans la base (ce qui nous intéresse ici).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    col <nom_srce> NEW_VALUE <nom_variable>;
    select <nom_srce> from ...;
    A noter que variable prendra toujours la dernière valeur qui lui est affectée :

    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
    SQL>  col src new_value var;
    SQL> select 1 src from dual union select 2 src from dual;
     
          SRC
    ---------
            1
            2
     
    SQL> select &var from dual;
    old   1: select &var from dual
    new   1: select         2 from dual
     
            2
    ---------
            2
     
    SQL> select 3 src from dual;
     
          SRC
    ---------
            3
     
    SQL> select &var from dual;
    old   1: select &var from dual
    new   1: select         3 from dual
     
            3
    ---------
            3
    Et puis à côté de ça il y a encore plein de paramètres que je ne connais pas ...
    As-tu vu ce passage là de la doc ? :
    http://www.oracle.com/technology/sup.../sub_var9.html

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

Discussions similaires

  1. [2.x] Entité avec nom de table dynamique
    Par bedomon dans le forum Symfony
    Réponses: 5
    Dernier message: 17/07/2015, 18h26
  2. Create Table avec PRO*C avec nom de table dynamique
    Par laurent_56 dans le forum Oracle
    Réponses: 6
    Dernier message: 01/12/2011, 18h08
  3. Requête SQL dynamique avec nom de table dans une variable
    Par jonjack dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 15/09/2011, 14h37
  4. [PDO] ma requête n'est pas executé avec un nom de table dynamique
    Par Alexdezark dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 23/03/2010, 20h34
  5. Création de table avec nom de colonne dynamique
    Par jibileg dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/12/2007, 22h13

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