OracleのDBビュー/システムテーブルパッケージの所与の部分がプロシージャまたはファンクションであるかどうかを確認します
-
23-09-2019 - |
質問
私は、Oracle システムテーブルに関するいくつかのメタデータを取得するためにを使用しています私達のデータベースにあるパッケージ。
ここに私のクエリのいずれかです。
select AP.PROCEDURE_NAME
from ALL_PROCEDURES ap
where ap.object_name = :object_name
and ap.owner=:owner
and ap.procedure_name is not NULL
and ap.procedure_name like :procedure_name
私はまた、指定されたオブジェクトは、関数、プロシージャまたは型のいずれかであるかどうかを確認します。私はテーブルから直接データを取得するための直接的な方法を見つけるように見えることはできません。
をしてください注:の私はall_sourcesからそれを解析する必要がありますする必要はありません。
。解決
それはあなたが、パッケージ内のメソッドのすべてのパラメータを取得することができ、ビューALL_ARGUMENTSがあることが判明しました。この方法は、関数である場合には、戻り値を表すヌル名前の引数があります。あなたはALL_ARGUMENTSに対して参加する場合は、指定ALL_PROCEDURESエントリが関数またはプロシージャであれば、あなたは決定することができます。以下は、そのような選択を示す一例である。
select CASE (Select count(*) from ALL_ARGUMENTS aa
where aa.object_name=ap.procedure_name
and aa.object_id = ap.object_id
and argument_name is null)
WHEN 1 THEN 'FUNCTION'
WHEN 0 THEN 'PROCEDURE'
ELSE ''
END as is_function, ap.*
from all_procedures ap
where ap.object_name like '<package name>'
他のヒント
SQL> select distinct object_type from user_procedures;
OBJECT_TYPE
-------------------
PROCEDURE
PACKAGE
TRIGGER
FUNCTION
私は1つの任意の選択肢を持っていないだろうと思います。少なくとも、それがうまくフォーマットされています - 。すべてのタイプがTYPEで始まる、というように
あなたは、SQL * Plusおよびパッケージの作業を行うDESC
コマンドを、使用することができます
SQL> desc dbms_application_info;
PROCEDURE READ_CLIENT_INFO
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
CLIENT_INFO VARCHAR2 OUT
PROCEDURE READ_MODULE
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
MODULE_NAME VARCHAR2 OUT
ACTION_NAME VARCHAR2 OUT
PROCEDURE SET_ACTION
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
ACTION_NAME VARCHAR2 IN
PROCEDURE SET_CLIENT_INFO
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
CLIENT_INFO VARCHAR2 IN
PROCEDURE SET_MODULE
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
MODULE_NAME VARCHAR2 IN
ACTION_NAME VARCHAR2 IN
PROCEDURE SET_SESSION_LONGOPS
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
RINDEX BINARY_INTEGER IN/OUT
SLNO BINARY_INTEGER IN/OUT
OP_NAME VARCHAR2 IN DEFAULT
TARGET BINARY_INTEGER IN DEFAULT
CONTEXT BINARY_INTEGER IN DEFAULT
SOFAR NUMBER IN DEFAULT
TOTALWORK NUMBER IN DEFAULT
TARGET_DESC VARCHAR2 IN DEFAULT
UNITS VARCHAR2 IN DEFAULT
パッケージを反復処理し、その結果を解析することによって - それはDBA_SOURCEよりも解析する簡単な構造です - あなたが欲しいものを手に入れるかもしれません。覚えておくべき注意点。パッケージには、あなたがFUNCTION foo(date) RETURN date
、およびPROCEDURE foo(varchar)
両方を持つことができるようにオーバーロードをサポートしています。名前だけでマッチングするだけでは十分ではないかもしれません。