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
レコードは、プロシージャ自体ではなく、呼び出し元の無名ブロックに関するものであり、これは明らかに私が興味を持っていることです。
なぜこれが起こるのでしょうか?それを修正して手順のデータを表示するにはどうすればよいですか?