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

问题描述 投票:0回答:6

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

如果可能的话,我想询问两个问题:

  1. 按名称列出所有存储过程
  2. 列出存储过程的代码,并给出名称
sql oracle stored-procedures
6个回答
30
投票

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 对象,而
ALL_
视图仅包含您可以访问的那些对象。


1
投票

这是一个更简单的 SQL

SELECT * FROM User_Procedures;


0
投票

如果您想获得所有对内省存储过程(参数等)的调用,您可以将其从这个开源包中提取出来:

http://code.google.com/p/orapig

OraPIG 是 Oracle Python 接口生成器。它内省 oracle 包并为它们生成 python 包装器。


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的匿名存储过程(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

0
投票

要列出您连接到的数据库中的所有存储过程,只需执行以下命令:

select object_name from user_procedures;


0
投票

另一个可能有效的选项:

SELECT * FROM ALL_PROCEDURES;
© www.soinside.com 2019 - 2024. All rights reserved.