2

Oracleシステムテーブルを使用して、データベース内のパッケージに関するメタデータを取得しています。

これが私の質問の1つです:

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から解析する必要はありません。

4

3 に答える 3

3

パッケージ内のメソッドのすべてのパラメーターを取得できるビューall_argumentsがあることがわかりました。メソッドが関数の場合、戻り値を表すnull名の引数があります。したがって、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>'
于 2010-02-26T18:21:18.687 に答える
0

選択の余地はないと思います。少なくとも、適切にフォーマットされています。すべてのタイプは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)。名前だけで一致させるだけでは不十分な場合があります。

于 2010-02-26T18:19:20.007 に答える
0
SQL> select distinct object_type from user_procedures;

OBJECT_TYPE
-------------------
PROCEDURE
PACKAGE
TRIGGER
FUNCTION
于 2010-02-26T17:13:37.593 に答える