代码之家  ›  专栏  ›  技术社区  ›  Mike McQuaid

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

  •  13
  • Mike McQuaid  · 技术社区  · 17 年前

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

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

    1. 列出给定名称的存储过程的代码
    3 回复  |  直到 17 年前
        1
  •  29
  •   Adam Paynter    17 年前

    DBA_OBJECTS view将列出程序(以及几乎所有其他对象):

    SELECT owner, object_name
    FROM dba_objects 
    WHERE object_type = 'PROCEDURE'
    

    这个 DBA_SOURCE view将列出有关过程的源代码行:

    SELECT line, text
    FROM dba_source
    WHERE owner = ?
      AND name = ?
      AND type = 'PROCEDURE'
    ORDER BY line
    

    根据您的权限,您可能无法查询 DBA_源 意见。在这种情况下,您可以使用 ALL_OBJECTS ALL_SOURCE 相反这个 DBA_ 视图包含 全部的 对象,而 ALL_

        2
  •  1
  •   kajibu    6 年前

    下面是一个更简单的SQL SELECT * FROM User_Procedures;

        3
  •  0
  •   Mark Harrison    17 年前

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

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

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

        4
  •  0
  •   Peter Teoh    9 年前

    我认为从DBA_对象枚举可能遗漏了很多过程: (我在Oracle 12c上,以SYS登录)

    select count(*) from dba_objects where object_type = 'PROCEDURE';
           202
    

    整个ORACLE数据库看起来不可能只有202个过程。

    以及从DBA_过程中查询:

    select owner||'-'||object_name || '-'||procedure_name from
    dba_procedures WHERE PROCEDURE_NAME IS NOT NULL;
    
    26539 rows selected.
    

    现在重点关注SYS模式,它是每个数据库的默认模式(不是我的数据库所独有的):

    查询匿名存储过程( http://www.praetoriate.com/t_high_perform_calling_procedures.htm )属于SYS:

    select owner||'-'||object_name || '-'||procedure_name from dba_procedures WHERE PROCEDURE_NAME IS NULL and owner = 'SYS';
    994 rows selected.
    

    select owner||'-'||object_name || '-'||procedure_name from dba_procedures WHERE PROCEDURE_NAME IS NOT NULL and owner = 'SYS';
    15408 rows
    
        5
  •  0
  •   Duy Nguyen    5 年前

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

    select object_name from user_procedures;