查找从oracle中的主过程调用的过程列表

时间:2013-10-01 09:07:17

标签: oracle stored-procedures plsql

我在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找到所有这些?有没有这样做的工具?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

答案 4 :(得分: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,但这不适用于初学者(不是说您是初学者,只是注意到它的技能要求)。

祝你好运。凯文