我需要使用哪种SQL来列出Oracle数据库中的所有存储过程?
如果可能,我想要两个问题:
答案 0 :(得分:26)
DBA_OBJECTS
视图将列出过程(以及几乎任何其他对象):
SELECT owner, object_name
FROM dba_objects
WHERE object_type = 'PROCEDURE'
DBA_SOURCE
视图将列出相关过程的源代码行:
SELECT line, text
FROM dba_source
WHERE owner = ?
AND name = ?
AND type = 'PROCEDURE'
ORDER BY line
注意:您可能无法查询DBA_OBJECTS
和DBA_SOURCE
观看次数,具体取决于您的权限。在这种情况下,您可以使用ALL_OBJECTS
和ALL_SOURCE
代替。 DBA_
视图包含数据库中的所有对象,而ALL_
视图仅包含您可以访问的对象。
答案 1 :(得分:0)
如果你想获得对内省存储过程(参数等)的所有调用,你可以将它从这个开源软件包中删除:
http://code.google.com/p/orapig
OraPIG是Oracle Python接口生成器。它会内省oracle包并为它们生成python包装器。
答案 2 :(得分:0)
我认为从DBA_OBJECTS枚举可能错过了很多程序: (我在Oracle 12c上,以SYS身份登录)
select count(*) from dba_objects where object_type = 'PROCEDURE';
202
整个ORACLE数据库看起来真的不可能只有202个程序。
从DBA_PROCEDURES查询:
select owner||'-'||object_name || '-'||procedure_name from
dba_procedures WHERE PROCEDURE_NAME IS NOT NULL;
26539 rows selected.
现在关注SYS架构,它是每个数据库默认的(不是我的唯一):
查询属于SYS的ANONYMOUS存储过程(http://www.praetoriate.com/t_high_perform_calling_procedures.htm):
select owner||'-'||object_name || '-'||procedure_name from dba_procedures WHERE PROCEDURE_NAME IS NULL and owner = 'SYS';
994 rows selected.
SYS的非匿名存储过程有15K:
select owner||'-'||object_name || '-'||procedure_name from dba_procedures WHERE PROCEDURE_NAME IS NOT NULL and owner = 'SYS';
15408 rows
答案 3 :(得分:0)
这是一个更简单的SQL SELECT * FROM User_Procedures;
答案 4 :(得分:0)
要列出您所连接的数据库中的所有存储过程,只需执行以下命令即可:
select object_name from user_procedures;