sql >> データベース >  >> RDS >> Oracle

ALL_PROCEDURESビューにPROCEDURE_NAMEが表示されない

    ドキュメントから

    ALL_PROCEDURESは、関連するプロパティとともに、すべての関数とプロシージャを一覧表示します。たとえば、ALL_PROCEDURESは、関数がパイプライン化されているか、並列有効化されているか、または集約関数であるかを示します。関数がパイプライン化されているか、集約関数である場合、関連する実装タイプ(存在する場合)も識別されます。

    スタンドアロン手順がリストされるかどうかは明確ではありません パッケージでラップされたプロシージャ 同じように、またはそれは異なってそれを考慮しますか。以来、procedure_name 上記の質問のテストケースに見られるようなスタンドアロンの手順の名前はリストされません。

    PROCEDURE_NAME 列には、PACKAGEの一部であるプロシージャのプロシージャ名のみが含まれます。 。 STAND ALONE PROCEDURESの場合は、 OBJECT_NAMEを使用する必要があります 。

    SQL> show user
    USER is "LALIT"
    SQL> CREATE OR REPLACE
      2  PROCEDURE new_proc
      3  AS
      4  BEGIN
      5    NULL;
      6  END;
      7  /
    
    Procedure created.
    
    SQL>
    SQL> SELECT owner,
      2    object_name,
      3    procedure_name,
      4    object_type
      5  FROM all_procedures
      6  WHERE owner='LALIT'
      7  AND object_name='NEW_PROC';
    
    OWNER OBJECT_NAME     PROCEDURE_NAME  OBJECT_TYPE
    ----- --------------- --------------- ---------------
    LALIT NEW_PROC                        PROCEDURE
    
    SQL>
    

    パッケージにラップされている場合にのみ、procedure_nameを使用してプロシージャのリストを取得できます。

    SQL> -- package
    SQL> CREATE OR REPLACE
      2  PACKAGE new_pack
      3  IS
      4    PROCEDURE new_proc;
      5  END new_pack;
      6  /
    
    Package created.
    
    SQL>
    SQL> -- package body with a procedure
    SQL> CREATE OR REPLACE
      2  PACKAGE BODY new_pack
      3  IS
      4  PROCEDURE new_proc
      5  IS
      6  BEGIN
      7    NULL;
      8  END;
      9  END new_pack;
     10  /
    
    Package body created.
    
    SQL> SELECT owner,
      2    object_name,
      3    procedure_name,
      4    object_type
      5  FROM all_procedures
      6  WHERE owner='LALIT'
      7  AND procedure_name='NEW_PROC';
    
    OWNER OBJECT_NAME     PROCEDURE_NAME  OBJECT_TYPE
    ----- --------------- --------------- -----------
    LALIT NEW_PACK        NEW_PROC        PACKAGE
    
    SQL>
    

    これで、procedure_nameが実際のプロシージャとして表示され、object_nameがpackage_nameとして表示されます。

    もちろん、ほとんどの場合、本番システムではパッケージがあり、スタンドアロンの手順ではありません。ただし、テストとデモを行っている間は、スタンドアロンのプロシージャをコンパイルして実行します。したがって、Oracleが *_PROCEDURESビューの情報をどのように維持しているかを知っておくとよいでしょう。 。




    1. MariaDBでのPERIOD_DIFF()のしくみ

    2. PostgreSQLと認証システムの統合

    3. T-SQLのテーブル変数にSELECTINTO

    4. MySQLデータベースに写真を保存する方法