OracleのDBビュー/システムテーブルパッケージの所与の部分がプロシージャまたはファンクションであるかどうかを確認します

StackOverflow https://stackoverflow.com/questions/2343401

  •  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)両方を持つことができるようにオーバーロードをサポートしています。名前だけでマッチングするだけでは十分ではないかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top