ドキュメントから
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ビューの情報をどのように維持しているかを知っておくとよいでしょう。 。