从技术上讲,您可以使用该DBMS_METADATA
包在 CLOB 中获取视图的 DDL,然后对其进行解析以查找对您的表的引用。但是有比查看视图定义更简单的解决方案。
USER_DEPENDENCIES
Oracle 在视图中维护有关对象依赖关系的信息(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