Oracle 查找视图所依赖的所有表
我有一个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
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_依赖项除外。