技术上讲,你可以使用DBMS_METADATA
包在CLOB中获取视图的DDL,然后解析查找对表的引用。但是比查看视图定义要容易得多。
Oracle在USER_DEPENDENCIES
视图(或ALL_DEPENDENCIES
或DBA_DEPENDENCIES
,具体取决于您的权限级别以及是否尝试跟踪架构间的依赖关系)中维护有关对象依赖关系的信息。你好得多使用这些观点
SQL> create table base_table (
2 col1 number
3 );
Table created.
SQL> create view my_view
2 as
3 select *
4 from base_table;
View created.
SQL> select name, type
2 from user_dependencies
3 where referenced_name = 'BASE_TABLE';
NAME TYPE
------------------------------ ------------------
MY_VIEW VIEW
如果您正在使用USER_DEPENDENCIES
视图,你也可以做相关对象的树更复杂的东西。如果我创建第二个视图取决于第一个视图,我可以很容易地看到两个视图最终都使用基表。
SQL> create view my_view2
2 as
3 select *
4 from my_view;
View created.
SQL> ed
Wrote file afiedt.buf
1 select level, name, type
2 from user_dependencies
3 start with referenced_name = 'BASE_TABLE'
4* connect by referenced_name = prior name
SQL>/
LEVEL NAME TYPE
---------- ------------------------------ ------------------
1 MY_VIEW VIEW
2 MY_VIEW2 VIEW
这东西是坏屁股!不知道我过去如何不必使用它。这工作完美。我很感激你花时间回答。我会投两个票,因为他们都工作,但是,这是最好的答案。谢谢! – northpole 2011-04-04 19:49:50