确定PL / SQL过程的调用层次结构

时间:2015-02-06 20:58:03

标签: oracle plsql

我正在研究一些旧的PL / SQL代码,我正在寻找一种工具来显示调用层次结构,就像我对Eclipse和Java代码一样。

例如,如果我有以下代码:

create or replace package body pkgA as 
  procedure foobar is begin
    lambda(1);
  end;

  procedure lambda(a NUMBER) is begin
    pkgB.test();   
  end;
end pkgA;
/
create or replace package body pkgB as 
  procedure test is begin
    select 1 from dual;
  end;
end pkgB;
/

我想要这棵树:

  1. pkgB.test
    1. pkgA.lambda
      1. pkgA.foobar
  2. 注意:我正在使用Toad 9,但我没有看到这样的功能(好吧,除非我需要寻找外键的参考树之类的东西)。

    此外,我正在寻找一种静态分析工具而不是动态分析工具,或者暗示我执行代码的工具。

2 个答案:

答案 0 :(得分:0)

我认为调用此更好的包过程是:dbms_utility.format_error_backtrace

所以你要使用DBMS_OUTPUT.PUT_LINE(dbms_utility.format_error_backtrace); 我将这些放在我的异常处理程序中进行测试(直到我有一个代码模板将其丢弃)。我还输出了指令:

所以它会返回如下结果:

EXCEPTION IN aeo_misc_tools.cursor_to_listV2 - -900: ORA-00900: invalid SQL statement
EXCEPTION IN my test script - -900: ORA-00900: invalid SQL statement
Error stack at top level:
ORA-06512: at "AEO.AEO_MISC_TOOLS", line 805
ORA-06512: at line 8

它不会像您指定的那样以树格式格式化错误,但它会完成工作,因此您可以在正确的行上找到错误。

答案 1 :(得分:0)

您可以使用Visual-Expert的调用层次结构,此工具可以分析PL代码并向您显示调用函数

Called hierarchy of PL code