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)