首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ALL_PROCEDURES视图没有显示PROCEDURE_NAME

ALL_PROCEDURES视图没有显示PROCEDURE_NAME
EN

Stack Overflow用户
提问于 2015-02-23 11:39:42
回答 1查看 1.5K关注 0票数 3

为什么我不能在user_procedures视图中看到我的过程?为什么procedure_name视图上的all_procedures筛选器不返回任何行。

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

测试用例:

代码语言:javascript
复制
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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-23 11:39:42

来自文档

ALL_PROCEDURES列出了所有函数和过程以及相关的属性。例如,ALL_PROCEDURES指示函数是流水线函数、并行启用函数还是聚合函数。如果函数是流水线的或聚合函数,则关联的实现类型(如果有的话)也会被标识出来。

它没有说明它是否会以相同的方式列出独立过程和包装在中的过程,也没有说明它是否会以不同的方式看待它。因为,procedure_name不会像上面问题中的测试用例那样列出独立过程的名称。

PROCEDURE_NAME列将只具有作为PACKAGE一部分的过程的过程名称。对于独立的过程,您需要使用OBJECT_NAME.

代码语言:javascript
复制
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获取过程列表。

代码语言:javascript
复制
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。

当然,主要是在生产系统中,我们会有包,而不是独立的程序。但是,在测试和演示时,我们确实编译和运行独立的过程。因此,了解甲骨文如何维护*_PROCEDURES views中的信息是很好的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28672956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档