【问题标题】:Find the list of procedures invoked from the main procedure in oracle查找从 oracle 中的主过程调用的过程列表
【发布时间】:2013-10-01 09:07:16
【问题描述】:

我在 oracle 中有一个主程序,它调用其中的许多程序。这些内部过程也调用它内部的函数和过程。这持续到许多层面。 例如:

Proc A

 call c

 call d

end............

proc c

 call e

 call f

end ....................

proc e

 call j

 call h

end

j 调用一些在内部调用另一个的过程,依此类推。这个循环一直循环下去。

我想查找在执行 main api 时在运行时调用的所有过程的名称。是否可以使用 toad 找到所有这些?有什么工具可以做到这一点吗?

【问题讨论】:

  • 基本上你想看看当你执行你的主程序时,所有的程序和函数或其他对象都在使用吗?
  • 查看我的回答,希望对您有所帮助。
  • 一个对你有用的链接:forums.oracle.com/thread/2430991
  • 也许您正在寻找code profiling 工具?对于 Oracle,请参阅 DBMS_PROFILER

标签: oracle stored-procedures plsql


【解决方案1】:

这是一个如何递归旅行的例子user_dependencies

select * from user_dependencies 
start with name = 'MAIN_PROC' 
connect by name = prior referenced_name 
        and type = prior referenced_type
        and referenced_type in ('PROCEDURE', 'FUNCTION' );

观看演示:---->http://www.sqlfiddle.com/#!4/9ca2a/1

【讨论】:

    【解决方案2】:

    您可以使用 oracle 中的 dba_dependencies 数据字典视图检查主过程中使用的过程/函数的名称。但是,为了在运行时进行检查,您可能必须编写 DBMS_OUTPUT.PUT_LINE 语句,或者您可以创建一个 audit_log_table,您可以在其中插入过程/函数的名称。

    【讨论】:

    • 嗨,dba_dependencies 只能为我提供在主过程中直接引用的过程和包。但是我需要的是当我调用主过程时可以调用的所有过程还包括从引用的过程中调用的过程。
    • @njnbat 你只需要遍历dba_dependecies table 递归
    【解决方案3】:

    在 Toad 的模式浏览器中单击您正在执行的主程序,在右侧面板上,有一个名为 Deps (Used By) 的选项卡。在此您将找到所有正在使用的对象。

    或者,您可以执行以下操作,列出所有依赖对象

    SELECT  *
      FROM  user_dependencies
     WHERE  name = '<your_procedure_name>' AND referenced_type='PROCEDURE'
    

    【讨论】:

    • dba_dependencies 和 user_dependencies 给了我同样的结果。它没有提供由主 api 中的参考过程调用的过程。因此它对我的事业没有帮助。
    • Oracle 的 SQL Developer 也有类似的功能。
    • @polppan 是的,我也在 toad 中尝试过 deps(被使用)。它只给了我在该过程中直接引用的 api。
    【解决方案4】:

    我使用 Oracle AUDIT 来跟踪客户端应用程序使用了哪些函数/过程/包(从客户端调用它们)。您可以使用它指定特定的 plsql 语句名称,在您的情况下为您的主过程名称,并进一步跟踪它们。我认为这可能会有所帮助。

    【讨论】:

      【解决方案5】:

      没有简单的元数据查询可以提供您想要的。但是,您可以在以下一些领域进行自己的研究以找到您需要的内容。

      1. 使用 PL/SCOPE。这是一个 Oracle 提供的工具,当您打开它时,它会在您每次编译时自动神奇地收集有关您的 pl/sql 代码的详细信息,并将这些信息存储在新的 Oracle 字典表中。因此,您可以编写有关代码结构、执行的查询等的报告。

      http://stevenfeuersteinonplsql.blogspot.com/2018/07/the-plscope-resource-center.html

      1. 看看 Conquest Software 的 CLEARSQL。这是一个 pl/sql 分析器工具,它还可以分析 pl/sql 代码。它会生成精美的图片和其他工件,以帮助您了解您的代码在做什么。它是对其他人的代码进行代码审查的好工具。我现在要告诉你,没有什么比编写代码的开发人员拥有更好的文档更适合进行代码审查的了。正确使用这个工具可以让你成为这项活动的摇滚明星。这个工具曾经很便宜,但他们对自己拥有的东西的价值有了明智的认识。不过还是值得的。此链接只是他们工具集的一个链接,订阅可能不是大多数人的最佳定价策略。

      https://sqldev.tech/clearsql8_subscription

      1. 您可以在代码中使用 DBMS_UTILITY 例程:FORMAT_ERROR_BACKTRACE 和 FORMAT_CALLSTACK 来告诉您当前所处的位置。我再次将您推荐给 Steven。

      http://www.oracle.com/partners/campaign/o25plsql-093886.html

      1. 如果你真的很绝望,你可以看看 DBMS_DEBUG,但这不适合初学者(不是说你是初学者,只是注意它的技能要求)。

      祝你好运。凯文

      【讨论】:

        猜你喜欢
        • 2018-08-12
        • 2018-11-28
        • 1970-01-01
        • 1970-01-01
        • 2013-01-24
        • 1970-01-01
        • 2022-01-06
        • 1970-01-01
        • 2019-04-12
        相关资源
        最近更新 更多