2011-01-12 3 views
16

PL/SQLパッケージ、プロシージャ、またはファンクションが使用されているかどうかを確認するにはどうすればよいですか。 PL/SQLパッケージ、プロシージャ、またはファンクションの使用状況に関する統計を含むOracle表またはビューがありますか。PL/SQLパッケージ、プロシージャ、またはファンクションが使用されているかどうかをどのように確認できますか?

+8

これを削除して、ユーザーからの電話があったかどうかを確認します。 :-) –

+0

ほとんど使用されないパッケージ/ proc /関数が存在する可能性があるため、 "usage"を定義してください。削除する必要はありません。 –

答えて

5

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

1

オブジェクトに依存性があるかどうかは、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インスタンス自体の内部で記憶されたコード内の任意の依存関係を返します。

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

+0

これはどのように質問に答えるかわかりませんが、プロシージャは依存関係がなく、次のレイヤから直接呼び出され、別のプロシージャはいくつかの依存関係を持つ可能性がありますが、呼び出されることはありませんそれで、決して "使われていない"。あなたはあなたの答えを精緻化して、それがどのように問題に対処しているかを示すことができます。私はあなたがサイトの初心者であるので、これをdownvotingしていない、BTW、ようこそ! – jachguate

+0

元の質問には、別の層の発信者を探しているかどうかは言及されていませんでした。 Oracleインスタンス自体が、インスタンス外のどのレイヤーが特定の関数を呼び出すのかを知ることは不可能です。私の回答は、単にOracleインスタンスに格納されているコードの依存関係を表示することでした。 – JordanBean

3

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

文書番号PL/Scopeは、プログラム単位のコンパイル時にPL/SQLソースコード内の識別子に関するデータを収集し、静的データ辞書ビューで使用できるようにするコンパイラ主導のツールです。収集されたデータには、識別子の種類、用途(宣言、定義、参照、呼び出し、割り当て)、およびソースコード内の各用途の場所に関する情報が含まれます。

PL /スコープの時間を過ごしたブラウジングを最小限にし、ソースコードを理解することにより、PL/SQL 開発者の生産性を向上させる強力かつ効果的なPL /スコープのソースコードブラウザの開発を可能にします。

あなたはhttp://download.oracle.com/docs/cd/E11882_01/appdev.112/e17125/adfns_plscope.htm#g1010526

+0

PL/ScopeはOPの状況には役立ちません。*潜在的に*使用されていない関数やプロシージャが実際に*使用されている頻度を知りたがっています。 –

0

でそれについての詳細を見つけることができますまた、あなたは何をしようとしてために有用PL/SQL計装パッケージILOを見つけるかもしれません。

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

または

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

あなたは自己参照を無視する必要がありますが、それは見つけることは簡単なはず:

12

また、USER/ALL_SOURCEを照会してみてください。

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

あなたはまた、パッケージまたはトップレベル関数/プロシージャが

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

NBで使用されているかどうかを確認することができます:あなたは、特に、その後差し出がましい機能を探している場合に必要

としてALL_/DBA_にUSER_切り替えます別のオプションは、警告を使用してコードをコンパイラにあるあなたがヒキガエルのようなエディタを使用することができますオンにしてから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 
1

。プロシージャーが依存するオブジェクトと、プロシージャーを参照するオブジェクトの両方を直接リストします。

関連する問題