我需要使用什么SQL来列出Oracle数据库中的所有存储过程?

时间:2009-06-05 13:44:35

标签: sql oracle stored-procedures

我需要使用哪种SQL来列出Oracle数据库中的所有存储过程?

如果可能,我想要两个问题:

  1. 按名称列出所有存储过程
  2. 列出存储过程的代码,名称为

5 个答案:

答案 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_OBJECTSDBA_SOURCE观看次数,具体取决于您的权限。在这种情况下,您可以使用ALL_OBJECTSALL_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;