2011-01-31 7 views
28

質問がありますパッケージで特定のテーブルやカラムが使用されているかどうかを調べるためにすべてのパッケージを検索できますか?それぞれのパッケージを開き、私が探している値を見つけ出すにはパッケージが多すぎます。すべてのパッケージを検索してテーブルやカラムを検索する

あなたがこれを行うことができます

答えて

51

select * 
from user_source 
where upper(text) like upper('%SOMETEXT%'); 

また、SQL Developerは内蔵されています。この下を行うためのレポート:

View > Reports > Data Dictionary Reports > PLSQL > Search Source Code 

USER_SOURCEのための11Gのドキュメントは、あなたがhere

+0

ありがとうございます。まさに私が探していたもの。あなたは私に数時間の仕事を保存しました。 user_sourceの詳細情報はどこにありますか? –

+2

更新答え –

+1

大文字と小文字を区別基準を入力することを避けるために、私はこのクエリの1日3回のように、このページに来て、それは必死に以下の改善が必要である参照してください:USER_SOURCE アッパー(テキスト)から を選択* を( '%検索文字列%') –

8

ですがビュー*_DEPENDENCIESを使用できます。例えば、

SELECT owner, NAME 
    FROM dba_dependencies 
WHERE referenced_owner = :table_owner 
    AND referenced_name = :table_name 
    AND TYPE IN ('PACKAGE', 'PACKAGE BODY') 
+3

明らかに、これはすべてのパッケージが静的SQLを使用する場合にのみ有効です。パッケージに動的SQLが含まれていることがわかっている場合は、Tony Andrewsの方が優れています。 – Allan

+0

@Allan:静的SQLについての良い点。 –

0

は時々あなたが探している列には、あなたに興味を持っていない他の多くのものの名前の一部であってもよい。

たとえば、私は最近、また一部を構成する「BQR」と呼ばれる列、探していました"BQR_OWNER"、 "PROP_BQR"などの他の多くの列のうちのいくつかを使用することができます。

したがって、ワードプロセッサーに「単語全体のみ」を示すチェックボックスを付けることができます。

残念ながら、LIKEにはこのような機能はありませんが、REGEXP_LIKEが役立ちます。

SELECT * 
    FROM user_source 
WHERE regexp_like(text, '(\s|\.|,|^)bqr(\s|,|$)'); 

これは、名前の一部として、このコラムを見つけて、「BQR」と他の列を除外するための正規表現です:

(\s|\.|,|^)bqr(\s|,|$) 

正規表現がホワイトスペースにマッチする(\ s)は、 (|)、ピリオド(。)、コンマ(、)、または行頭(^)の後に "bqr"を続け、空白、コンマまたは行末($)。

0

ちなみに、 "UPPER(bqr)"として使用できるので "("や ")"などの他の文字を追加する必要がある場合は、それらのオプションを前と後のリストに追加することができます文字の後に。

(\s|\(|\.|,|^)bqr(\s|,|\)|$) 
関連する問題