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 :

trouver les tables dans une requete sql


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2002
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 72
    Points : 63
    Points
    63
    Par défaut trouver les tables dans une requete sql
    voila j'ai un ensemble de requête sql (plusieurs millier) dans une table, et j'aimerai retrouver les tables rattachés. je donne un exemple :

    "select tutu from matable"
    --> matable
    "select tutu from matable,matable2 where monchamp=1"
    -->matable
    -->matable2

    oracle doit le faire en interne donc ça doit être jouable normalement.

    merci d'avance.

  2. #2
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonjour,

    Quelle est ta version Oracle ?

    tu a v$sql,v$$sql_text,v$sqlarea pour commencer ....

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Avec un algorithme qui va bien, vous pouvez récupérer toutes les chaînes comprises entre les FROM et les WHERE de chaque requête (en tenant compte des virgules, des alias et des schémas).

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par bguihal Voir le message
    oracle doit le faire en interne donc ça doit être jouable normalement.
    bien raisonné !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create table lsc_matable(tutu number);
    create table lsc_matable2(monchamp number);
    create table lsc_t(txt varchar2(4000));
    insert into lsc_t(txt) values ('select tutu from lsc_matable');
    insert into lsc_t(txt) values ('select tutu from lsc_matable,lsc_matable2 where monchamp=1');
    commit;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    begin 
      for f in (select * from lsc_t) loop
        dbms_output.put_line('txt : '||f.txt);
        delete plan_table;
        execute immediate 'explain plan for '||f.txt;
        for g in (select * from plan_table where object_name is not null) loop
          dbms_output.put_line('  --> '||g.object_owner||'.'||g.object_name);
        end loop;
      end loop;
    end;
    /
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    txt : select tutu from lsc_matable
      --> TGPOWNER.LSC_MATABLE
    txt : select tutu from lsc_matable,lsc_matable2 where monchamp=1
      --> TGPOWNER.LSC_MATABLE
      --> TGPOWNER.LSC_MATABLE2

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Excellente solution, bien meilleure que la mienne.

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    si tu veux un aperçu global des dépendances, tu peux aussi tenter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    delete plan_table;
    begin 
      for f in (select * from lsc_t) loop
        execute immediate 'explain plan for '||f.txt;
      end loop;
    end;
    /
    select distinct object_owner, object_name from plan_table ;

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/10/2010, 09h39
  2. Réponses: 10
    Dernier message: 11/08/2009, 14h43
  3. Réponses: 4
    Dernier message: 02/06/2009, 14h57
  4. copier les resultats d'une requete sql dans un fichier texte
    Par mohammed_amine_wardy dans le forum SQL
    Réponses: 1
    Dernier message: 02/01/2008, 16h23
  5. Mettre a jour les Parametres dans une requete SQL
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 7
    Dernier message: 31/03/2004, 13h51

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