dbms_output.put_line
はplsql
コードのパフォーマンスを低下させますか?dbms_output.put_line
答えて
はい、実行する必要のある別のコードですが、出力が実際にオンにならない限り、オーバーヘッドはごくわずかです。それはあなたがPL/SQLで行う他に何対dbms_output.put_line
を呼び出す回数の比に依存Is there a performance impact for dbms_output.put_line statements left in packages?
:
はここで、より詳細でAskTomの質問です。
すべてのコード行がコードのパフォーマンスを低下させます。結局のところ、少なくとも余分なCPUを消費する余分な命令です。したがって、dbms_output.put_lineはパフォーマンスを低下させます。
実際の質問です:コードのこの余分な行の利点はパフォーマンスのペナルティを上回っていますか?あなただけがその質問に答えることができます。
よろしくお願いします。
Rob。
私はdbms_outputの代わりにログテーブルを使用します。 (もちろん、あなたのニーズに合わせて変更)、自律型トランザクションとして設定するようなものを確認してください:
create or replace package body somePackage as
...
procedure ins_log(
i_msg in varchar2,
i_msg_type in varchar2,
i_msg_code in number default 0,
i_msg_context in varchar2 default null
) IS PRAGMA AUTONOMOUS_TRANSACTION;
begin
insert into myLogTable
(
created_date,
msg,
msg_type,
msg_code,
msg_context
)
values
(
sysdate,
i_msg,
i_msg_type,
i_msg_code,
i_msg_context
);
commit;
end ins_log;
...
end;
あなたはもちろんのログテーブルを作成していることを確認します。自律型トランザクションは、あなたのログのstmtが挿入されることを保証すること
create or replace myProcedure as
cursor some_cursor is
select * from someTable;
v_ctr pls_integer := 0;
begin
for rec in some_cursor
loop
v_ctr := v_ctr + 1;
-- do something interesting
if (mod(v_ctr, 1000) = 0) then
somePackage.ins_log('Inserted ' || v_ctr || ' records',
'Log',
i_msg_context=>'myProcedure');
end if;
end loop;
commit;
exception
when others then
somePackage.ins_log(SQLERRM, 'Err', i_msg_context=>'myProcedure');
rollback;
raise;
end;
注:あなたがループ内で多くの操作をやっている場合は、あなたのコードでは、あなただけのx numの操作、何かのように一度ログインすることもできますエラーが発生して、他のすべてのトランザクションをロールバックしても(別のトランザクション以降に)
・ホープ、このことができます... DBMS_OUTPUTよりもはるかに良いが、)
手順が適切なオプションでコンパイルされている場合DBMS_OUTPUT.PUT_LINEは事前に解析されたコードの中で唯一になるように、あなたがconditional compilationに見ることができます。
1つの質問は、DBMS_OUTPUT.ENABLEがコールされたことです。 この場合、DBMS_OUTPUT.PUT_LINEの値はセッションのメモリー構造に記録されます。あなたがそこに物を押し込んで、決して取り出していない場合(アプリケーションサーバーの接続によってはそうかもしれない)、数日後にメモリにたくさんのものがあるかもしれません。
- 1. DBMS_OUTPUT.PUT_LINEエラーを返す
- 2. DBMS_SCHEDULER.CREATE JOBはDBMS_OUTPUT.PUT_LINEで機能しません。
- 3. dbms_output.put_lineの結果を実行する方法
- 4. ストアドプロシージャのカーソルForループ内でdbms_output.put_lineが機能しない
- 5. DBMS_OUTPUT.PUT_LINEをbashスクリプトを含むファイルに出力します。
- 6. QtSqlを使用してdbms_output.put_lineのOracle出力を取得します。
- 7. dbms_output.put_lineは 'set serveroutput on'の後でもプロシージャ内には表示されません
- 8. dbms_output.put_line()の代わりに、繰り返しごとに呼び出されるたびに内容を1行ずつ出力する方法がありますか?
- 9. ORA-00972識別子が長すぎます - 宣言文
- 10. PL/SQL ORA-01422:要求された行数よりも正確なフェッチが返されます
- 11. は、Oracleの手順に
- 12. PL/SQLブロックの式の変数に値を割り当てる方法は?
- 13. 表
- 14. カーソルのPL/SQLコードでのエラー
- 15. のOracle SQLプロシージャは、ので、私はこのように私のテーブルのスタイルを設定しようとしていレイアウト
- 16. 数値または値のエラー:数変換エラーに文字コマンドでライン36から始まる
- 17. oracleでsys_dateで変数を渡す方法
- 18. カーソルを配列内部で使用するループ
- 19. PLSQLコードのifブロックからプロシージャを繰り返し呼び出す方法はありますか?
- 20. UTL_FILEとは別にファイルに書き込む方法
- 21. ループ中に自己に値を追加
- 22. hellofromというパッケージを作成します。 Proc_1はProc_2、Proc_2を呼び出し、Proc_3を呼び出します。
- 23. ユーザーは=>シンボル を使用している。この例では
- 24. PL/SQL正規表現
- 25. 三角形を等価、二等辺三角形などに分類するSQLクエリ
- 26. 出力のためにPL/SQLにスペースを入れる方法を知っていますか?
- 27. OracleでのCLOBの再利用
- 28. 従業員のEmployeeID値をINパラメータとして指定した従業員の給与クラスを返す方法
- 29. 変更PL/SQLを返すプログラム
- 30. SQLの開発者を使用してPL/SQLでユーザ入力を出力
もう1つの大きな要因は、パラメータを作成するためにどのような種類の式を使用するかです。 'dbms_output.put_line(my_slow_function())' –