プライベート関数の性質は、それらがプライベートであるということです。デフォルトでそれらを公開するデータディクショナリビューはありません。 USER_PROCEDURESおよびUSER_ARGUMENTSは、パブリックプロシージャ(パッケージspec0で定義されているプロシージャ)の情報のみを表示します。
ただし、PL / SCOPEを使用してそれらに関する情報を取得することはできますが、そのためには少し追加の作業が必要です。
-
SQL> alter session set plscope_settings='IDENTIFIERS:ALL';
-
SQL> alter package your_package compile body;
これで、次のクエリを使用してプライベートプログラムユニットを見つけることができます:
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
);
プライベートプロシージャの引数を取得するには、前のクエリのUSAGE_IDをこのクエリにプラグインします。
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
/
user_identifiers
のため、これは左結合である必要があります スカラーデータ型(文字、数値、日付、clob)のデータ型エントリがありますが、複雑なデータ型(xmltype、ユーザー定義型)はありません。
USER_PROCEDURESやUSER_ARGUMENTSを照会するほど簡単ではありませんが、PL / SCOPEからプロシージャに関する多くの情報を取得できます(実際、驚くほど不格好です)。詳細をご覧ください。 PL / SCOPEデータはSYSAUX表領域に格納されるため、DBAでお湯に浸からないように注意してください。