技術的には、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
、依存オブジェクトのツリーを使用してより高度な操作を行うこともできます。最初のビューに依存する2番目のビューを作成すると、両方のビューが最終的にベーステーブルを使用することが簡単にわかります。
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