19

PL/SQL パッケージ、プロシージャ、または関数が使用されているかどうかをどのように確認できますか? PL/SQL パッケージ、プロシージャ、または関数の使用に関する統計を含む Oracle テーブルまたはビューはありますか?

4

6 に答える 6

21

USER/ALL_sourceにクエリを実行することもできます。

SELECT * FROM all_source
where UPPER(TEXT) like UPPER('%procedure_name%')

また

SELECT * FROM all_source
where UPPER(TEXT) like UPPER('%package.function_name%')

自己参照を無視する必要がありますが、それは簡単に見つけることができます。

また、user/all_viewsから「view」ソースを確認する必要があります。ただし、ビューソースのクエリに関する他の質問を参照してください。

パッケージまたはトップレベルの機能/手順がで使用されているかどうかを確認することもできます

select * from all_dependencies
where referenced_name like '%PACKAGE_NAME%';

注意:必要に応じてuser_をall_/dba_に切り替えてください

特に呼び出されていない関数を探している場合、別のオプションは、警告をオンにしてコードをコンパイルしてから、PLW-06002とLPW-06006を探すことです。

exec DBMS_WARNING.add_warning_setting_cat('ALL','ENABLE','SESSION')
create or replace function x return number
as
procedure y is begin null; end;
begin
return 0;
return 1;
end;

show errors

Errors for FUNCTION X:

LINE/COL ERROR
-------- -----------------------------------------------------------------
1/1      PLW-05018: unit X omitted optional AUTHID clause; default value DEFINER used
3/1      PLW-06006: uncalled procedure "Y" is removed.
6/1      PLW-06002: Unreachable code
于 2012-06-18T02:19:51.467 に答える
6

デフォルトではありません。ただし、Oracle データベースの監査機能を使用することはできます。At Ask Tomは、プロシージャ コールの監査に関する長いスレッドです。

于 2011-01-12T15:26:53.027 に答える
3

Oracle 11 (R2?) を使用している場合はPL/Scope、チャンスを与えます。

PL/Scopeは、プログラム単位のコンパイル時に PL/SQL ソース コード内の識別子に関するデータを収集し、静的データ ディクショナリ ビューで使用できるようにするコンパイラ主導のツールです。収集されたデータには、識別子の種類、使用方法 (宣言、定義、参照、呼び出し、代入)、およびソース コード内の各使用箇所に関する情報が含まれます。

PL/Scope は、強力で効果的な PL/Scope ソース コード ブラウザの開発を可能にします。このブラウザは、ソース コードの閲覧と理解に費やす時間を最小限に抑えることで、PL/SQL 開発者の生産性を向上させます。

詳細については、http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17125/adfns_plscope.htm#g1010526 を参照してください

于 2011-02-10T21:31:29.140 に答える
2

DBA_DEPENDENCIESテーブルをクエリすると、オブジェクトに依存関係があるかどうかを確認できます。

SELECT OWNER, 
       NAME, 
       TYPE 
  FROM SYS.DBA_DEPENDENCIES 
 WHERE REFERENCED_OWNER = '<your object owner>' 
   AND REFERENCED_NAME = '<your object name>'
   AND REFERENCED_TYPE IN ('PACKAGE', 'PROCEDURE', 'FUNCTION');

このクエリは、Oracleインスタンス自体の内部に格納されているコードの依存関係を返します。

インスタンスの外部でオブジェクトが呼び出されているかどうかはわかりません。

于 2011-02-10T20:40:35.057 に答える
1

Toad などのエディタを使用できます。これらは、プロシージャが依存するオブジェクトとプロシージャを参照するオブジェクトの両方を直接リストします。

于 2014-03-11T06:25:28.343 に答える
0

pl/sql インスツルメンテーション パッケージILOは、あなたがしようとしていることに役立つかもしれません。

于 2011-02-11T15:26:33.173 に答える