2016-11-23 9 views
-1

年に数回、私のチームは何らかの理由で新しいOracleパッケージを作成します。このパッケージは、パッケージ(パッケージが実行されるユーザー/ロール)に既に付与されているテーブルのみを参照します。Oracleパッケージからプログラムでテーブル参照を抽出する方法はありますか?

場合によってはそうではありません。パッケージがチェックインされ、コンパイルに失敗し、テーブル名の近くに行番号があるわかりにくいエラーメッセージが表示されます。

この時点で、(政治的な)承認プロセスが実行され、付与が与えられ、パッケージをチェックして、新しいテーブル名で失敗するということは問題です。

プログラムですべての参照のリストを取得する方法はありますか?もしそうならば、dba_tab_privsと照合して、事前に助成金が必要かどうかを確認したり、助成金スクリプトを生成して、実際にチームを助けることができます(特に数ヶ月後、私たちは再び申し訳ありません。

答えて

5

(つまり、あなたのコード内のランダムな動的SQLのビットを持っていない)すべての参照が静的であると仮定すると、あなたは `DBA_DEPENDENCIES'

select referenced_owner, referenced_name 
    from dba_dependencies 
where owner = <<owner of package>> 
    and name = <<name of package>> 
    and type = 'PACKAGE BODY' 
    and referenced_type = 'TABLE' 

を照会することができますあなたは、などの非表参照のために見ることができますあなたが望むならば、パッケージ仕様だけでなくパッケージ本体にも関連しています。これは、パッケージ本体がテーブルに依存するケースを表示するだけです。

+0

Dang彼らは私にdba_dependenciesの権限を与えません! –

+0

@Gary_W - 前提条件に応じて、 'all_dependencies'または' user_dependences'を使うことができます。しかし、 'dba_tab_privs'を使って、必要な権限を自動化することを考えているのであれば、' dba_dependencies'の特権を求めることができると思います。 –

+0

甘い! ALL_DEPENDENCIESは機能します。これは私のための新しいものです。ありがとうございました! –

1

ALL_SOURCEテーブルを参照してください。あなたは探しているもののTEXT列に対して照会することができます。

select * 
from all_source 
where type = 'PACKAGE BODY' 
and owner = 'XYZ' 
and name = 'YOUR PACKAGE NAME' 
order by line; 

編集:ジャスティン洞窟の答えが正しいものであるが、情報のすべての少しは助けとして、私はとにかく情報については、ここでこれを残しておきます。

関連する問題