首页 文章

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

提问于
浏览
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找到所有这些?有没有这样做的工具?

5 回答

  • 0

    这是一个如何以递归方式传送 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

  • 0

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

  • 0

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

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

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

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

  • 0

    没有简单的元数据查询可以提供您想要的内容 . 然而,在某些领域你可以自己研究,找到你需要的东西 .

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

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

    • 看看Conquest Software的CLEARSQL . 这是一个pl / sql分析器工具,也可以分析pl / sql代码 . 它可以生成出色的图片和其他工件,以帮助您了解代码的作用 . 它是一个很好的工具,可以对其他人的代码进行代码审查 . 我现在告诉你,与编写代码的开发人员相比,没有什么能比你更好的文档进行代码审查了 . 使用这个工具可以让你成为这项活动的摇滚明星 . 这个工具以前很便宜,但是他们对所拥有的 Value 很明智 . 仍然值得 . 此链接只是其工具集的一个链接,订阅可能不是大多数人的最佳定价策略 .

    https://sqldev.tech/clearsql8_subscription

    • 您可以在代码中使用DBMS_UTILITY例程:FORMAT_ERROR_BACKTRACE和FORMAT_CALLSTACK来告诉您自己的位置 . 我再次将你推荐给史蒂文 .

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

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

    祝好运 . 凯文

相关问题