2017-08-28 12 views
-1

PL/SQLを使用して特定のプロシージャで使用済列のリストを取得できますか?私は私のOracle DBで500以上の手順をチェックし、それらに使用されているすべての列を印刷する必要があります。ストアド・プロシージャで使用される列の検索方法

+0

他のプロシージャがクエリからいくつかの列をローカル変数にフェッチし、これらの変数をプロシージャに渡すとどうなりますか?いくつかのクエリが 'column1 + column2 * column3 As new_alias'のような表現を計算し、このエイリアスがあなたの手続きに渡されるとどうなりますか? – krokodilko

+0

あなたは奇妙な仕事をしています。この 'select * from some_table'のようにsys_refcursorをオープンしたプロシージャを持っていて、別の名前のフィールドがあるレコードを読み込むとします。この場合、どの列が使用されると考えられますか? – wolfrevokcats

答えて

1

驚くべきことに、Oracleが鑑賞するために利用できるPL/SQLでの計算テーブル依存関係作りを行います。

select * from user_dependencies -- can also use all_ or dba_dependencies 
where type = 'PROCEDURE' and REFERENCED_TYPE = 'TABLE'; 

をしかし、あなたが本当にカラムレベルの依存関係が必要な場合、私はそれがはるかに難しいだろうと思います。ここでは、その問題に関するいくつかの問題を説明する非常に簡単な答えがあります。

したがって、既存の列名と一致するすべての文字列を検索することができます。私はこのアプローチで数十の問題を考えることができます。上記のコメント者は、あなたが見たいコールスタックの深さのように、それらのいくつかについて言及しました。また、列の名前に応じて、あいまいな名前(SID、MODIFIED_DATEなど)が重複したエントリを生成します。同じスペルを持つ列名とローカル変数への実際の参照を区別する方法はありません。またはコメント。また、ビューやシノニムを使用すると、検索結果が不正になる可能性があります。それは本当に難しい質問のようです。私はからuser_dependenciesのテーブルがあなたのニーズに十分であることを願っています。

関連する問題