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

Oracle Discussion :

[PL/SQL] Sql dynamique et multi table


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 37
    Points : 20
    Points
    20
    Par défaut [PL/SQL] Sql dynamique et multi table
    Bonjour, je rencontre un soucis lies au sql dynamique

    J'ai une requete dynamique qui se construit autour d'X tables et dont le select renvoie X colonnes

    exemple ma requete peut tres bien etre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select toto.id, toto.text, tata.id from toto , tata
    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select toto.id, toto.text,titi.text from toto,titi
    de quel facon puis je recuperer les donnees de ma requete apres le execute immediate etant donne qu'il peut tres bien y avoir 50 colonnes issues de tables differentes et de type different.

  2. #2
    Membre habitué
    Inscrit en
    Août 2004
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 176
    Points : 126
    Points
    126
    Par défaut
    Tu crée une table avec le select
    style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    begin
    declare
    cmd   varchar2(1000);
    begin
    cmd := 'create ma_table table as 
               select toto.id, toto.text, tata.id from toto ,tata';
    execute immediate cmd;
    end;
    apres t'auras dans ta table ma_table ce que tu veux
    tu peux faire ceci apres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    declare
    str  varchar2(12); -- toto.text etant de ce type ( par exemple)
    begin
    insert into str
    select text from ma_table
    end;
    end;
    where id = 30;

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    merci l'idee est pas mal mais elle ne resoud pas mon probleme.

    Je peut tres bien avoir

    VARCHAR,VARCHAR,VARCHAR,INT

    comme

    INT INT INT VARCHAR

    mes donnees sont variables comment savoir quoi recuperer meme avec un create table?

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Vous pouvez connaître les infos concernant les colonnes ramenées par un ordre Select avec la fonction : dbms_sql.describe_columns

    Vous pouvez vous inspirer de l'article suivant:
    http://sheikyerbouti.developpez.com/dynamic/dynamic.htm

    voyez notament le package PKG_DYNAMIC et particulièrement la procédure Get_Struct()

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 45
    Points : 52
    Points
    52
    Par défaut
    Salut, j'ai eu récemment besoin de mettre en place une solution similaire, j'ai principalement utilisé les procédures / fonctions du package dbms_sql.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DECLARE
      l_cursor            NUMBER;
      l_col_descs       DBMS_SQL.DESC_TAB;
      l_col_count       NUMBER;
    BEGIN
      l_cursor := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(l_cursor, ta_query, DBMS_SQL.NATIVE);
      DBMS_SQL.DESCRIBE_COLUMNS( l_cursor, l_col_count, l_col_descs);
     
      Ensuite tu fais appel à DBMS_SQL.DEFINE_COLUMN
      et à DBMS_SQL.COLUMN_VALUE
    END;
    Bon courage

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Nous avons déjà été confronté à cette problématique sur le forum : http://www.developpez.net/forums/showthread.php?t=10118

Discussions similaires

  1. Requête SQL Update mono ou multi table
    Par d.tellier dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/10/2011, 08h12
  2. [Debutant] Requête SQL Multi-Tables
    Par Superbretzel dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/02/2008, 11h47
  3. [SQL] INSERT multi-tables
    Par K_!!! dans le forum Oracle
    Réponses: 3
    Dernier message: 08/06/2006, 23h08
  4. tableau dynamique via une table sous sql server
    Par bibi2607 dans le forum ASP
    Réponses: 5
    Dernier message: 21/02/2005, 15h45
  5. UPDATE multi-tables sous SQL Server
    Par Cybernet dans le forum Langage SQL
    Réponses: 8
    Dernier message: 25/03/2004, 15h34

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