web-dev-qa-db-ja.com

Oracle 12c:すべてのPL / SQLコードに対するテキスト検索

特定の関数を呼び出しているコードを確認するために、DB内のすべてのPL/SQL関数/プロシージャをテキスト検索したい。そのためのSQL Developerのツール、または関数コードを格納するシステムスキーマの下のメタテーブルはありますか?スキーマのテキストダンプも役立ちます。

2
laurt

以下が当てはまる場合:

1)関数がパッケージに含まれていない
2)関数呼び出しは動的SQLではありません

次に、その依存関係がdba_dependenciesから何であるかを簡単に確認できます。

SELECT * 
  FROM dba_dependencies 
 WHERE referenced_owner = 'MYOWNER' AND referenced_name = 'MYOBJECT';

それ以外の場合は、dba_sourceを確認できます。

SELECT * 
  FROM dba_source 
 WHERE upper(text) like '%MYOWNER.MYOBJECT%';

スキーマのすべてのオブジェクトのソースを表示するには:

SELECT * 
  FROM dba_source 
 WHERE owner = 'MYOWNER'
 ORDER BY type, name, line;
3
Kris Johnston

PL/Scopeと呼ばれる機能を使用したい。

有効にすると、コンパイルされたPL/SQLでプロシージャがどのように呼び出されるかを追跡します。これは、ALL_SOURCEよりもはるかに小さい個別のディクショナリビューのセットに格納されるため、クエリがはるかに高速で簡単になります。

はい、SQL DeveloperにはPL/Scopeへのインターフェースがあります。

enter image description here

これをSQL Developerで設定する方法について話します here

PL/Scopeのデータベースドキュメント here

1
thatjeffsmith

他の回答では、SQLが関数を呼び出したビューは見つかりませんでした。ビューのデータはdba_viewsにありますが、SQLは不便なLONGデータ型です。ビューから検索するには、次のような一時テーブルを作成する必要がありました。

create table temp_dba_views
    (owner varchar2(128), view_name varchar2(128), text clob);

insert into temp_dba_views
    (select owner, view_name, to_lob(text) from dba_views);

select * from temp_dba_views where upper(text) like '%MYFUNCTION%';

dba_mviewsにあるマテリアライズドビューについても同様です。主な違いは、text列がqueryという名前になっていることです。

0
laurt