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

Administration Oracle Discussion :

Où trouver les tables sous-jacentes des colonnes d'une vue?


Sujet :

Administration Oracle

  1. #1
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut Où trouver les tables sous-jacentes des colonnes d'une vue?
    Hello tout le monde,

    J'aimerais savoir s'il existe dans le dictionnaire de données d'Oracle une vue permettant d'avoir le nom des tables derrière les colonnes des vues.

    Par exemple j'ai deux tables et deux vues.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> select * from cat;
    TABLE_NAME                     TABLE_TYPE
    ------------------------------ -----------
    TEST01                         TABLE
    TEST02                         TABLE
    V_TEST                         VIEW
    V_TEST01                       VIEW
    Les vues.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> desc v_test;
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     ID                                                 NUMBER
     LIB01                                              VARCHAR2(30 CHAR)
     
    SQL> desc v_test01;
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     ID                                                 NUMBER
     LIB                                                VARCHAR2(50 CHAR)
    Voici le code des vues.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SQL> select dbms_metadata.get_ddl('VIEW', 'V_TEST') from dual;
    DBMS_METADATA.GET_DDL('VIEW','V_TEST')
    --------------------------------------------------------------------------------
      CREATE OR REPLACE FORCE VIEW "HR01"."V_TEST" ("ID", "LIB01") AS
      select t01.id, t02.lib01 from test01 t01, test02 t02 where t01.id=t02.id01
     
     
    SQL> select dbms_metadata.get_ddl('VIEW', 'V_TEST01') from dual;
    DBMS_METADATA.GET_DDL('VIEW','V_TEST01')
    --------------------------------------------------------------------------------
      CREATE OR REPLACE FORCE VIEW "HR01"."V_TEST01" ("ID", "LIB") AS
      select t01.id, t01.lib from test01 t01
    Et voici ce que j'obtiens dans DBA_TAB_COLS.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> select table_name, column_name, column_id, internal_column_id from dba_tab_cols where owner = 'HR01';
    TABLE_NAME                     COLUMN_NAME                     COLUMN_ID INTERNAL_COLUMN_ID
    ------------------------------ ------------------------------ ---------- ------------------
    TEST01                         ID                                      1                  1
    TEST01                         LIB                                     2                  2
    TEST02                         ID01                                    1                  1
    TEST02                         LIB01                                   2                  2
    V_TEST01                       LIB                                     2                  2
    V_TEST                         ID                                      1                  1
    V_TEST                         LIB01                                   2                  2
    V_TEST01                       ID                                      1                  1
    C'est bien mais je voudrais une colonne supplémentaire appelée "ORIGINAL_TAB" qui, pour les vues, mettrait le nom des tables ou des vues de niveaux N-1 (car je sais qu'une vue peut elle même être basée sur une vue, comme les vues Oracle).

    Dans DBA_VIEWS aucune info sur les objets sous-jacents à part dans l'ordre SQL.
    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
    SQL> desc dba_views;
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     OWNER                                     NOT NULL VARCHAR2(30)
     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)
     EDITIONING_VIEW                                    VARCHAR2(1)
     READ_ONLY                                          VARCHAR2(1)
    Idem pour DBA_TAB_COLS : pas d'info sur les tables sous-jacentes des vues.
    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
    SQL> desc dba_tab_cols
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     OWNER                                     NOT NULL VARCHAR2(30)
     TABLE_NAME                                NOT NULL VARCHAR2(30)
     COLUMN_NAME                               NOT NULL VARCHAR2(30)
     DATA_TYPE                                          VARCHAR2(106)
     DATA_TYPE_MOD                                      VARCHAR2(3)
     DATA_TYPE_OWNER                                    VARCHAR2(120)
     DATA_LENGTH                               NOT NULL NUMBER
     DATA_PRECISION                                     NUMBER
     DATA_SCALE                                         NUMBER
     NULLABLE                                           VARCHAR2(1)
     COLUMN_ID                                          NUMBER
     DEFAULT_LENGTH                                     NUMBER
     DATA_DEFAULT                                       LONG
     NUM_DISTINCT                                       NUMBER
     LOW_VALUE                                          RAW(32)
     HIGH_VALUE                                         RAW(32)
     DENSITY                                            NUMBER
     NUM_NULLS                                          NUMBER
     NUM_BUCKETS                                        NUMBER
     LAST_ANALYZED                                      DATE
     SAMPLE_SIZE                                        NUMBER
     CHARACTER_SET_NAME                                 VARCHAR2(44)
     CHAR_COL_DECL_LENGTH                               NUMBER
     GLOBAL_STATS                                       VARCHAR2(3)
     USER_STATS                                         VARCHAR2(3)
     AVG_COL_LEN                                        NUMBER
     CHAR_LENGTH                                        NUMBER
     CHAR_USED                                          VARCHAR2(1)
     V80_FMT_IMAGE                                      VARCHAR2(3)
     DATA_UPGRADED                                      VARCHAR2(3)
     HIDDEN_COLUMN                                      VARCHAR2(3)
     VIRTUAL_COLUMN                                     VARCHAR2(3)
     SEGMENT_COLUMN_ID                                  NUMBER
     INTERNAL_COLUMN_ID                        NOT NULL NUMBER
     HISTOGRAM                                          VARCHAR2(15)
     QUALIFIED_COL_NAME                                 VARCHAR2(4000)
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  2. #2
    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
    Dans la définition de la vue comme vous l'avez fait dans votre exemple avec dbms_metadata.

  3. #3
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Oui, j'avais vu avec dbms_metadata mais je voulais plutôt récupérer via un ordre SQL simple ces noms de tables, sans avoir à découper l'ordre SQL avec SUBSTR...
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

Discussions similaires

  1. Option pour mettre le nom des colonnes d'une vue en majuscules ?
    Par devnet75 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/09/2015, 12h04
  2. Comment rendre dynamique les noms des colonnes d'une vue
    Par patic dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/02/2009, 10h41
  3. Réponses: 4
    Dernier message: 09/01/2009, 23h07
  4. Liste des colonnes d'une vue
    Par chaouki_2000 dans le forum SQL
    Réponses: 5
    Dernier message: 28/02/2008, 15h28

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