首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Oracle中获取包中的存储过程

在Oracle中获取包中的存储过程
EN

Stack Overflow用户
提问于 2020-08-26 03:51:00
回答 1查看 39关注 0票数 0

我们调用以下代码来获取oracle中的所有存储过程:

代码语言:javascript
复制
select object_name from user_procedures

对于每个存储过程,我们调用以下代码来获取所有参数:

代码语言:javascript
复制
select object_name, argument_name, data_type, default_value, in_out, data_length, data_precision, data_scale, char_length from user_arguments order by POSITION

如果包中没有存储过程,这将非常有效。但是如果它们在包中,那么第一次select将返回每个存储过程的包名,而不是存储过程名。

对于存储过程在包中的情况,我们可以调用什么select来获取所有存储过程?优选地,调用返回内部包和独立包的所有名称。

EN

回答 1

Stack Overflow用户

发布于 2020-08-26 03:55:01

但是,它们正是您一直在寻找的……user_procedures。只是对象名不是一个过程,而是包的名。

代码语言:javascript
复制
SQL> create package pkg_test as
  2    procedure p_test;
  3    function f_test return number;
  4  end;
  5  /

Package created.

SQL> select procedure_name
  2  from user_procedures
  3  where object_name = 'PKG_TEST';

PROCEDURE_NAME
------------------------------
F_TEST
P_TEST


SQL>

如果过程是公开的,也就是说,它们在包specification.中命名,这是很好的如果他们对包是私有的,那么--恐怕--要找到这些信息并不容易。也许通过解析USER_SOURCE,搜索procedure字符串...

另外,正如@Sayan评论的那样,我对私有过程的看法是错误的--在这种情况下,PL/Scope是有帮助的。

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

https://stackoverflow.com/questions/63586150

复制
相关文章

相似问题

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