web-dev-qa-db-ja.com

Oracleでストアドプロシージャを含むオブジェクトを検索するSQL

Oracleデータベースのすべてのオブジェクトを照会できるようにするSQLを作成する必要があります。残念ながら、使用できるツールにはこれが組み込まれていません。基本的に、すべてのテーブル、プロシージャ、トリガー、ビュー、すべてを検索する必要があります。

オブジェクト名を検索する方法を知っています。しかし、オブジェクトのコンテンツを検索する必要があります。つまり、SELECT * FROM DBA_OBJECTS WHERE object_name = '%search string%';

ありがとう、グレン

25
Glenn Wark

私はあなたを理解しているかどうかはわかりませんが、トリガー、プロシージャ、パッケージ、および関数のソースコードを照会するには、「user_source」テーブルで試すことができます。

select * from user_source
19
Drevak

私は質問を十分に理解しているとは思いませんが、特定の検索文字列についてデータベース上のオブジェクトを検索したい場合は試してください:

SELECT owner, name, type, line, text 
FROM dba_source
WHERE instr(UPPER(text), UPPER(:srch_str)) > 0;

そこからさらに情報が必要な場合は、オブジェクト/行番号を調べることができます。

30

必要なオブジェクトがログインしているスキーマによって所有されていない場合は表示されないため、DBA_SOURCEを使用します(アクセスできる場合)。

パッケージ内の関数とProcsを知る必要がある場合は、次のようなものを試してください。

select * from all_source
 where type = 'PACKAGE'
   and (upper(text) like '%FUNCTION%' or upper(text) like '%PROCEDURE%')
   and owner != 'SYS';

最後の行は、すべてのsysスタッフ(DBMS_など)が返されないようにします。独自のスキーマのものだけが必要な場合、これはuser_sourceで機能します。

特定のテーブルを使用するすべての手順を見つけようとしたときにこの質問に到達しました

この記事で指摘されているように、Oracle SQL Developerはこの機能を提供します。 https://www.thatjeffsmith.com/archive/2012/09/search-and-browse-database-objects-with-Oracle-sql-開発者/

[表示]メニューの[DBオブジェクトの検索]を選択します。 DB接続を選択します。テーブルの名前を入力します。オブジェクトタイプでは、関数、プロシージャ、およびパッケージのみを保持します。 [コード]セクションで、[すべてのソース行]をオンにします。

enter image description here

4
Newton fan 01

ALL_SOURCEは、現在のユーザーがアクセスできる保存済みオブジェクトのテキストソースを示します。

ここに解決策の1つがあります

select * from ALL_SOURCE where text like '%some string%';
2