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 :

Liste des tables d'une vue


Sujet :

Oracle

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Février 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Liste des tables d'une vue
    Bonjour tout le monde,

    je vais vous expliquer ma problématique (assez complexe).

    Outil : Oracle 11g

    En effet, Il existe une multitude de vues oracles qui sont déjà créées.
    Je voudrais savoir s'il était possible de stocker dans une table la liste des tables sources de ma vue Oracle. Si possibles avec les colonnes, ça serait parfait.
    Pour vous expliquer, je dois retracer la traçabilité de mes vues.

    Je vais essayer de vous donner un exemple, pour mieux comprendre :

    - Exemple :
    Ma vue (Vue) est créée à partir de différentes tables sources (table_A et table_B).
    Ma vue contient 2 colonnes alimentées 1 colonne de la table A (A_1) et 1 colonne de la table B (B_2).


    Vue (2 colonnes) :
    Vue_1 Vue_2
    --------------------

    Table A (2 colonnes) :
    A_1 A_2
    -----------------

    Table B (2 colonnes) :
    B_1 B_2
    -----------------

    Et je voudrais une table qui liste les tables sources de ma vue, ainsi savoir quelle colonne de la table source permet l'alimentation de la colonne de ma vue .

    Ce qui donnerait une table de listing (d'après l'exemple):
    Table_listing :
    Nom_vue Colonne_vue Nom_table_source Colonne_table_source
    ----------------------------------------------------------------------
    Vue Vue_1 table_A A_1
    Vue Vue_2 table_B B_2




    Voilà, j'espère avoir été assez clair dans la description de ma problématique.
    Si vous avez d'autres questions, je suis toute ouïe !
    Merci d'avance de portée attention à ma problématique

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 47
    Points : 110
    Points
    110
    Par défaut
    Bonjour,

    Je ne connais pas de solution simple à votre problème. Les textes de construction des vues sont visibles dans les tables systèmes Oracle à travers la vue USER_VIEWS pour les vues du schéma de l'utilisateur courant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     Nom                                       NULL ?   Type
     ----------------------------------------- -------- ----------------------------
     VIEW_NAME                                 NOT NULL VARCHAR2(30)
     TEXT_LENGTH                                        NUMBER
     TEXT                                               LONG
     TYPE_TEXT_LENGTH                                   NUMBER
     TYPE_TEXT                                          VARCHAR2(4000)
     OID_TEXT_LENGTH                                    NUMBER
     OID_TEXT                                           VARCHAR2(4000)
     VIEW_TYPE_OWNER                                    VARCHAR2(30)
     VIEW_TYPE                                          VARCHAR2(30)
     SUPERVIEW_NAME                                     VARCHAR2(30)
    Le texte de création de la vue est stockée dans la colonne TEXT. Mais pour récupérer chaque entités correspondant à une colonne d'une vue ce n'est pas si simple. Une colonne peut par exemple être le résultat d'une opération entre plusieurs colonnes de table et/ou constantes et/ou fonctions d'agrégation, pour compliquer un peu plus la tache il faut prendre en compte l'existence éventuelle d'opération ensembliste dans la requête de la vue.
    Dans un cas très simple la récupération des colonnes constituant la vue se ferait par un simple parcours de la clause SELECT à partir des caractères '(', ')', ',' mais ce ne sera pas le cas tout le temps.

    Je n'ai pas de solution concrète à vous donner, mais au moins ces quelques pistes pour ne pas laisser la question sans réponse. Mais si il existe des moyens plus simples de faire la correspondance entre les colonnes d'une vue et leurs opérandes je suis aussi curieux de les connaître.

    Bonne journée.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Février 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci pour ta réponse.
    Je sais que ma problématique n'est pas si simple, c'est pour ça que j'espérai des gens aussi tordus que moi ici pour s'être posé la question ou sinon pour me donner des pistes comme vous venez de le faire.

    J'espère que d'autres utilisateurs auront d'autres idées ou même, la connaissance de l'existence d'une fonction ou procédure que je ne connais pas.

    Merci.

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Le faire en plsql sera très dur à faire, vu que les colonnes des vues peuvent être des concaténations de colonnes, des fonctions, etc.. Et que les objets des FROM peuvent être des tables, mais aussi des vues, voir des fonctions.

    Bref, faut le faire à la main

  5. #5
    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
    Obtenir la liste des tables référencées par la vue n’est pas compliquée la vue all_dependencies contient les informations.
    Pour la suite je ne vois pas à quoi ça pouvait servir tout simplement.

  6. #6
    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
    Points : 8 079
    Points
    8 079
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Obtenir la liste des tables référencées par la vue n’est pas compliquée la vue all_dependencies contient les informations.
    Pour la suite je ne vois pas à quoi ça pouvait servir tout simplement.
    Sauf erreur de ma part, DBA_DEPENDENCIES ne fournit que les dépendances directes. S'il y a des dépendances en cascade (des vues de vues), il faudra passer par le script UTLDTREE et les manipulations qui l'accompagnent.

  7. #7
    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
    Vous avez raison mais la vue xxx_dependecies et le script en question se basent finalement sur la table du dictionnaire sys.dependency$ donc on devrait y arriver.
    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
     
    SQL> create table t_d1 (a int)
      2  /
     
    Table created
     
    SQL> create table t_d2 (b int)
      2  /
     
    Table created
     
    SQL> create view w_t_d1 as select * from t_d1 cross join t_d2
      2  /
     
    View created
     
    SQL> create table t_d3(c int)
      2  /
     
    Table created
     
    SQL> create view w_t_d2 as select * from w_t_d1 cross join t_d3
      2  /
     
    View created
     
    SQL> create view w_t_d3 as select count(*) Nbr from w_t_d2 cross join t_d2
      2  /
     
    View created
     
    SQL> 
    SQL> Select distinct referenced_name
      2    From user_dependencies t
      3  Connect By prior referenced_name = name
      4    Start With name = 'W_T_D3'
      5  /
     
    REFERENCED_NAME
    ----------------------------------------------------------------
    T_D2
    T_D3
    T_D1
    W_T_D2
    W_T_D1

Discussions similaires

  1. Extraire liste des tables d'une base !!!!
    Par Bjuice2 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/03/2005, 15h44
  2. Obtenir la liste des tables d'une table
    Par Pigoulou dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 09/02/2005, 14h12
  3. Obtenir le listing des tables d'une BDD
    Par zoubidaman dans le forum Outils
    Réponses: 1
    Dernier message: 10/11/2004, 00h17
  4. liste des tables d'une BDD
    Par 120 dans le forum ASP
    Réponses: 4
    Dernier message: 21/06/2004, 14h06
  5. Liste des tables d'une bases de données spécifique
    Par faridos23 dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/08/2003, 22h20

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