web-dev-qa-db-ja.com

Oracleデータベース上のすべてのストアドプロシージャを一覧表示するには、どのSQLを使用する必要がありますか?

Oracleデータベース上のすべてのストアドプロシージャを一覧表示するには、どのSQLを使用する必要がありますか?

可能であれば、2つのクエリが必要です。

  1. すべてのストアドプロシージャを名前で一覧表示します
  2. 名前を付けて、ストアドプロシージャのコードを一覧表示します
14
Mike McQuaid

DBA_OBJECTSビューには、プロシージャ(および他のほとんどすべてのオブジェクト)が一覧表示されます。

SELECT owner, object_name
FROM dba_objects 
WHERE object_type = 'PROCEDURE'

DBA_SOURCEビューには、問題のプロシージャのソースコードの行が一覧表示されます。

SELECT line, text
FROM dba_source
WHERE owner = ?
  AND name = ?
  AND type = 'PROCEDURE'
ORDER BY line

注:権限によっては、DBA_OBJECTSおよびDBA_SOURCEビューをクエリできない場合があります。この場合、代わりにALL_OBJECTSALL_SOURCEを使用できます。 DBA_ビューには、データベース内のallオブジェクトが含まれますが、ALL_ビューには、アクセスできるオブジェクトのみが含まれます。

26
Adam Paynter

DBA_OBJECTSから列挙すると、多くの手順を見逃した可能性があると思います:(私はOracle 12cを使用しており、SYSとしてログインしています)

select count(*) from dba_objects where object_type = 'PROCEDURE';
       202

Oracleデータベース全体が202個のプロシージャしか持てないことは本当に不可能に見えました。

そして、DBA_PROCEDURESからのクエリ:

select owner||'-'||object_name || '-'||procedure_name from
dba_procedures WHERE PROCEDURE_NAME IS NOT NULL;

26539 rows selected.

ここで、すべてのデータベースにデフォルトで付属するSYSスキーマに焦点を当てます(私のものに固有ではありません)。

SYSに属するANONYMOUSストアドプロシージャ( http://www.praetoriate.com/t_high_perform_calling_procedures.htm )のクエリ:

select owner||'-'||object_name || '-'||procedure_name from dba_procedures WHERE PROCEDURE_NAME IS NULL and owner = 'SYS';
994 rows selected.

また、SYSの非匿名ストアドプロシージャには15Kがあります。

select owner||'-'||object_name || '-'||procedure_name from dba_procedures WHERE PROCEDURE_NAME IS NOT NULL and owner = 'SYS';
15408 rows
0
Peter Teoh

ストアドプロシージャ(パラメータなど)をイントロスペクトするためのすべての呼び出しを取得する場合は、次のオープンソースパッケージからそれを引き出すことができます。

http://code.google.com/p/orapig

OraPIGはOracle Python Interface Generatorです。Oracleパッケージをイントロスペクトし、それらのラッパーをpython]生成します。

0
Mark Harrison