Oracle 所有程序视图都没有';不显示程序名称

Oracle 所有程序视图都没有';不显示程序名称,oracle,stored-procedures,plsql,view,metadata,Oracle,Stored Procedures,Plsql,View,Metadata,为什么我不能在user\u procedures视图中查看我的过程?为什么procedure\u name过滤器在all\u procedures视图中不返回任何行 这个问题主要是为了帮助那些正在寻找类似问题的人。我希望任何想知道这个问题的人都能在这里找到答案 测试用例: SQL> show user USER is "LALIT" SQL> CREATE OR REPLACE 2 PROCEDURE new_proc 3 AS 4 BEGIN 5 NUL

为什么我不能在
user\u procedures
视图中查看我的过程?为什么
procedure\u name
过滤器在
all\u procedures
视图中不返回任何行

这个问题主要是为了帮助那些正在寻找类似问题的人。我希望任何想知道这个问题的人都能在这里找到答案

测试用例:

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 procedure_name='NEW_PROC';

no rows selected

SQL>

所有_程序列出所有功能和程序,以及 关联属性。例如,所有_程序都指示 函数是否为流水线、并行启用或聚合函数 功能。如果函数是流水线函数或聚合函数,则 还标识了相关的实现类型(如果有)

它不清楚它是否列出一个“强”独立的程序以及一个在<>强>包<强>中的相同的方法,或者是不同的考虑。因为,

procedure\u name
不会列出独立程序的名称,如上面问题中的测试用例所示

PROCEDURE\u 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>
只有将过程包装在包中时,才能使用过程名称获取过程列表

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>
现在您可以将过程名称视为实际过程,将对象名称视为包名称

当然,在大多数生产系统中,我们都会有软件包,而不是独立的程序。但是,在测试和演示时,我们确实编译并运行独立的过程。因此,了解Oracle如何在*\u过程视图中维护信息是很好的

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>