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

Posted

技术标签:

【中文标题】我需要使用啥 SQL 来列出 Oracle 数据库上的所有存储过程?【英文标题】:What SQL would I need to use to list all the stored procedures on an Oracle database?我需要使用什么 SQL 来列出 Oracle 数据库上的所有存储过程? 【发布时间】:2010-10-31 15:40:36 【问题描述】:

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

如果可能的话,我想要两个查询:

    按名称列出所有存储过程 列出存储过程的代码,并给定一个名称

【问题讨论】:

【参考方案1】:

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

select object_name from user_procedures;

【讨论】:

【参考方案2】:

这里是一个更简单的 SQL SELECT * FROM User_Procedures;

【讨论】:

【参考方案3】:

我认为从 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

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

【参考方案5】:

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_SOURCEDBA_ 视图包含数据库中的所有对象,而 ALL_ 视图仅包含您可以访问的那些对象。

【讨论】:

你想做object_type in ('PROCEDURE', 'FUNCTION', 'PACKAGE') 来获取所有可能的源代码。 抱歉,这里是 Oracle 新手。我似乎看不到那个视图/表格。这是否意味着我以错误的用户身份登录? 您可能没有查询这些视图所需的权限。您可以尝试使用 ALL_OBJECTS 和 ALL_SOURCE。 与 ALL_* 合作,想要更新答案,我会接受吗? 我在示例中保留了 DBA_ 视图,但我添加了一个注释来解释 ALL_ 视图。如果您可以访问 DBA_ 视图,它们仍然是可取的。 :)

以上是关于我需要使用啥 SQL 来列出 Oracle 数据库上的所有存储过程?的主要内容,如果未能解决你的问题,请参考以下文章

这个 SQL 需要采用啥格式才能让 Oracle 接受?

Oracle SQL 查询列出所有活动用户/模式并给出对象计数

在 PL/SQL 中列出过程参数

oracle sql语句 显示树形结构

Oracle sql中的隐式和显式数据类型转换有啥区别

怎么查询oracle中响应时间最长的sql语句,并列出平均响应时间