Oracle DBMS_PROFILER仅在结果表中显示匿名

Gre*_*lds 5 oracle plsql oracle10g

我是DBMS_PROFILER的新手。我所看到的所有示例都使用一个简单的顶级过程来演示探查器的用法,并从中获取所有行号等。我将所有代码部署在包中,并且要填充我的探查会话非常困难plsql_profiler_units和有用的数据。我的大部分跑步看起来都是这样的:

RUNID RUN_COMMENT UNIT_OWNER  UNIT_NAME         SECS PERCEN
----- ----------- ----------- -------------- ------- ------
5     Test        <anonymous> <anonymous>        .00    2.1
      Profiler

5     Test        <anonymous> <anonymous>        .00    2.1
      Profiler

5     Test        <anonymous> <anonymous>        .00    2.1
      Profiler
Run Code Online (Sandbox Code Playgroud)

按照所有示例,我刚刚嵌入了对dbms_profiler.start_profiler,flush_data和stop_profiler的调用。主要区别在于我的代码在一个程序包中,并调用其他程序包。您是否必须分析调用堆栈中的每个存储过程?如果是这样,则使该工具变得毫无用处!

我已经检查了http://www.dba-oracle.com/t_plsql_dbms_profiler.htm中的提示,以及其他类似的网站。

Pet*_*ang 4

您确定这不是您检索数据的查询的问题吗plsql_profiler_units


我试过这个:

Create Procedure sub_procedure As
Begin
  dbms_output.put_line('test');
End;

Create Package test_package As
  Procedure test;
End;

Create Package Body test_package As
  Procedure test As Begin
    For i In 1 .. 10 Loop
      If(i<=5) Then
        sub_procedure;
      End If;
    End Loop;
  End;
End;

Begin
  DBMS_PROFILER.start_profiler(SYSDATE);
  test_package.test;
  DBMS_PROFILER.stop_profiler;
End;
Run Code Online (Sandbox Code Playgroud)

这个简单的查询

Select uni.unit_name, dat.line#, dat.total_occur
  From plsql_profiler_data dat
  Join plsql_profiler_units uni On (     uni.runid = dat.runid
                                     And uni.unit_number = dat.unit_number )
Run Code Online (Sandbox Code Playgroud)

给我预期的结果,还显示包和过程:

<anonymous>    1  0
<anonymous>    2  0
<anonymous>    3  2
<anonymous>    4  1
<anonymous>    5  0
TEST_PACKAGE   2  0
TEST_PACKAGE   3 11
TEST_PACKAGE   4  5
TEST_PACKAGE   5  6
TEST_PACKAGE   8  1
SUB_PROCEDURE  1  0
SUB_PROCEDURE  3  5
SUB_PROCEDURE  4  5
Run Code Online (Sandbox Code Playgroud)