2

我在 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 找到所有这些?有什么工具可以做到这一点吗?

4

5 回答 5

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

于 2013-10-01T21:49:02.540 回答
0

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

于 2013-10-01T09:18:00.850 回答
0

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

于 2014-07-31T09:36:44.467 回答
0

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

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

SELECT  *
  FROM  user_dependencies
 WHERE  name = '<your_procedure_name>' AND referenced_type='PROCEDURE'
于 2013-10-01T10:50:28.877 回答
0

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

  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 来告诉您当前所处的位置。我再次将您推荐给史蒂文。

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

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

祝你好运。凯文

于 2019-01-30T14:11:25.810 回答