我们调用以下代码来获取oracle中的所有存储过程:
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如果包中没有存储过程,这将非常有效。但是如果它们在包中,那么第一次select将返回每个存储过程的包名,而不是存储过程名。
对于存储过程在包中的情况,我们可以调用什么select来获取所有存储过程?优选地,调用返回内部包和独立包的所有名称。
发布于 2020-08-26 03:55:01
但是,它们正是您一直在寻找的……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字符串...
另外,正如@Sayan评论的那样,我对私有过程的看法是错误的--在这种情况下,PL/Scope是有帮助的。
https://stackoverflow.com/questions/63586150
复制相似问题