パッケージ本体からすべてのプライベートプロシージャ/関数を含むリストを取得したいと考えています。パッケージ本体からプライベートプロシージャ/関数のリストを取得
公開オブジェクトの場合は簡単ですが、私はプライベートオブジェクトのためにそれを行う方法はわかりません。
パッケージ本体からすべてのプライベートプロシージャ/関数を含むリストを取得したいと考えています。パッケージ本体からプライベートプロシージャ/関数のリストを取得
公開オブジェクトの場合は簡単ですが、私はプライベートオブジェクトのためにそれを行う方法はわかりません。
プライベート機能の性質は、それらがプライベートであることです。既定でそれらを公開するデータ辞書ビューはありません。 。USER_PROCEDURESとUSER_ARGUMENTSは
しかし、我々はPL/SCOPEを使用してそれらの情報を得ることができ、パッケージSPEC0で定義されたもの(パブリック手続きのための情報を表示するが、これは追加の努力の少しを必要とします。
SQL> alter session set plscope_settings='IDENTIFIERS:ALL';
SQL> alter package your_package compile body;
今、あなたは、このクエリを使用してプライベートなプログラム・ユニットを見つけることができます。
は、データ型のスカラー・データ型のエントリ(文字、数字を持っているのでselect ui.name
, ui.type
, ui.usage_id
, ui2.type as param_datatype
from user_identifiers ui
left join user_identifiers ui2
on ui2.usage_context_id = ui.usage_id
where ui.object_name = 'YOUR_PACKAGE'
and ui.usage = 'DECLARATION'
and ui.usage_context_id = :private_proc_usage_id
/
これは左結合する必要があります:民間手続きの引数は、このクエリに前のクエリからUSAGE_IDプラグ取得するには
select ui.type, ui.name, ui.usage_id
from user_identifiers ui
where ui.object_name = 'YOUR_PACKAGE'
and ui.usage = 'DEFINITION'
and ui.type in ('PROCEDURE', 'FUNCTION')
minus
(select 'PROCEDURE', upr.procedure_name
from user_procedures upr
where upr.object_name = 'YOUR_PACKAGE'
union
select 'FUNCTION', uarg.object_name
from user_arguments uarg
where uarg.package_name = 'YOUR_PACKAGE'
and uarg.position = 0
);
、日付、clob)、複雑なデータ型(xmltype、ユーザー定義型)ではありません。
USER_PROCEDURESまたはUSER_ARGUMENTSを照会するほど簡単ではないにしても、PL/SCOPEからプロシージャに関する多くの情報を得ることができます(実際は驚くほどclunkyです)。 Find out more。 PL/SCOPEデータはSYSAUX表領域に格納されているので、DBAにお湯を入れないでください。