如何获取Oracle视图中使用的所有表名?

时间:2014-11-07 11:39:23

标签: oracle

我想获得Oracle视图或SQL查询中使用的所有表名的列表。

例如,从下面的查询

select a.col1, b.col2
from first_table a, second_table b;

我想得到这个结果:

first_table
second_table

我有一个客户创建非常复杂的SQL查询作为视图,我希望能够快速提取其中使用的所有表。我在perl中找到了一种方法,但我想在SQL中做到这一点。

1 个答案:

答案 0 :(得分:1)

此查询为您提供位于架构VIEW_OWNER

中的视图VIEW_NAME的所有相关表(及其所有者)
select ud.referenced_owner tab_owner,
       ud.referenced_name tab_name
from all_dependencies ud
where ud.name = 'VIEW_NAME' 
  and ud.type = 'VIEW' 
  and ud.referenced_type = 'TABLE'
  and ud.owner = 'VIEW_OWNER';

如果所有表和视图都在您的模式中,则可以使用USER_DEPENDENCIES Oracle字典;如果可以存在来自不同模式的表,则可以使用ALL_DEPENDENCIES。