Oracle 查找视图所依赖的所有表

Oracle 查找视图所依赖的所有表,oracle,view,dependencies,Oracle,View,Dependencies,我有一个Oracle视图,我想找到视图所依赖的所有表。 可能,我的视图依赖于其他视图:在这种情况下,我希望递归地导航依赖项并访问表 以下是我的模式示例: CREATE TABLE T1 (A NUMBER); CREATE TABLE T2 (B NUMBER); CREATE TABLE T3 (A NUMBER, B NUMBER); CREATE VIEW V1 AS SELECT * FROM T1; CREATE VIEW V2 AS SELECT * FROM T2; CREATE

我有一个Oracle视图,我想找到视图所依赖的所有表。 可能,我的视图依赖于其他视图:在这种情况下,我希望递归地导航依赖项并访问表

以下是我的模式示例:

CREATE TABLE T1 (A NUMBER);
CREATE TABLE T2 (B NUMBER);
CREATE TABLE T3 (A NUMBER, B NUMBER);

CREATE VIEW V1 AS SELECT * FROM T1;
CREATE VIEW V2 AS SELECT * FROM T2;
CREATE VIEW V3 AS SELECT * FROM V1, V2 UNION ALL SELECT * FROM T3;
这是我想要得到的输出:

VIEW_NAME TABLE NAME
--------- ----------
V3        T1
V3        T2
V3        T3

DBA/USER/ALL_DEPENDENCIES系统视图包含此信息


您可以使用SELECT中的CONNECT BY子句递归地查询它。DBA/USER/ALL_DEPENDENCIES系统视图具有此信息


您可以使用SELECT中的CONNECT BY子句递归地查询它,该子句是用David Aldridge的答案解决的。我使用了以下查询:

SELECT CONNECT_BY_ROOT d.name AS view_name, d.referenced_name AS table_name
FROM user_dependencies d
WHERE d.referenced_type = 'TABLE'
START WITH d.name = 'V3' AND d.type = 'VIEW'
CONNECT BY PRIOR d.referenced_name = d.name AND PRIOR d.referenced_type = d.type

大卫·奥尔德里奇的回答解决了这个问题。我使用了以下查询:

SELECT CONNECT_BY_ROOT d.name AS view_name, d.referenced_name AS table_name
FROM user_dependencies d
WHERE d.referenced_type = 'TABLE'
START WITH d.name = 'V3' AND d.type = 'VIEW'
CONNECT BY PRIOR d.referenced_name = d.name AND PRIOR d.referenced_type = d.type

您需要dba权限才能执行此操作。@Rachcha select_catalog_角色足够了,dba_依赖项除外。您需要dba权限才能执行此操作。@Rachcha select_catalog_角色足够了,dba_依赖项除外。