问题描述
select object_name from user_procedures
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
如果存储过程不在软件包中,那将非常有用。但是,如果它们在软件包中,则第一个选择将为每个存储过程返回软件包名称,而不是存储过程名称。
对于存储过程在软件包中的情况,我们可以调用哪种方法来获取所有存储过程?最好是返回一个内部包和独立包的所有名称的调用。
解决方法
但是,它们 恰好是您一直在寻找的位置... user_procedures
。只是对象名称不是过程,而是程序包名称。
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
字符串...
P.S。正如@Sayan所评论的那样,我在私有过程方面是错的-在这种情况下,PL/Scope会有所帮助。