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:
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:
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:
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:
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:
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:
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) |