從documentation,
ALL_PROCEDURES列出了所有的功能和程序, 相關屬性一起。例如,ALL_PROCEDURES指示 函數是否是流水線,並行啓用或聚合 函數。如果函數是流水線或聚合函數,則還會標識關聯的實現類型(如果有)。
它沒有說明是否會列出獨立程序和包裹在PACKAGE以同樣的方式或是否認爲這是不同的過程。因爲procedure_name
不會列出上述問題的測試案例中看到的獨立程序的名稱。
PROCEDURE_NAME
列將只包含作爲PACKAGE
的一部分的過程的過程名稱。對於獨立程序,您需要使用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視圖中維護信息是很好的。