2
DECLARE
  v_run_no binary_integer;
  v_run_time_in_sec number;
BEGIN 
  dbms_profiler.start_profiler('Profiling my proc', 'Tom', v_run_no);

  schema.my_package.my_proc();

  dbms_profiler.stop_profiler();

  -- Calculate the TOTAL_TIME for each unit in the run by summing the TOTAL_TIME
  -- from each data record in the unit and writing it to the TOTAL_TIME column
  -- in the plsql_profiler_units table.
  dbms_profiler.rollup_run(v_run_no);

  -- Grab total run time for display
  SELECT r.RUN_TOTAL_TIME / 1000000000
  INTO v_run_time_in_sec
  FROM ucms_crim_conv.plsql_profiler_runs r
  WHERE r.RUNID = v_run_no;

  dbms_output.put_line('Profiled as run ' || v_run_no || ' in ' || v_run_time_in_sec || ' total sec.');
END;

この同じスクリプトを実行して、別のプロシージャを呼び出す行のみを変更して、別のプロシージャ コールのプロファイルを作成しましたがschema.my_package.my_proc();、すべてうまくいきました。

今度は、スクリプトが完了するとTOTAL_TIME、表の実行 ID の列に値を含む行が表示されplsql_profiler_runsます。

以前は、 にも 2 つの行が表示されplsql_profiler_unitsていました。1 つは匿名の呼び出しブロック用で、もう 1 つはプロファイリングされるプロシージャ用でplsql_profiler_data、各ユニットに関連する行が含まれていました。ただし、今回は、 の無名ブロックのみが表示されます。この実行 IDplsql_profiler_unitsの唯一のplsql_profiler_dataレコードは、プロシージャ自体ではなく、呼び出し元の無名ブロックに関するものであり、これは明らかに私が興味を持っていることです。

なぜこれが起こるのでしょうか?それを修正して手順のデータを表示するにはどうすればよいですか?

4

1 に答える 1