1

何百万もの行を処理しており、数時間かかるため、プロセスのステータスについてのアイデアを得るためにフィードバックが必要です。ストアド プロシージャからリアルタイムのフィードバックを得ることはできません。これは、出力が完全な実行後にのみ利用可能になるためです。解決策はありますか?

4

3 に答える 3

4

いくつかの解決策があります。

1 つは、何らかの説明をログに書き込むことです。ファイル ( UTL_FILE で書き出す) またはテーブル (自律型トランザクションを使用して、メイン トランザクションに影響を与えずに別のセッションでレコードを表示できるようにする) を使用できます。

もう 1 つの解決策は、DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS を使用して V$SESSION_LONGOPS ビューに書き込むことです。詳細を見る

ロギングは、長時間実行されるバックグラウンド プロシージャでは常に良い考えだと思います。何か問題が発生した場合、ログが唯一の情報源になります。

于 2012-10-30T09:18:25.823 に答える
2

別のテーブル (プロシージャの実行中に選択できるテーブル) に書き込む ReportStatus プロシージャを使用できます。

メインプロシージャとは独立してコミットできるように、PRAGMA AUTONOMOUS_TRANSACTION が必要です。

例:

CREATE OR REPLACE PROCEDURE ReportStatus(status NUMBER)
AS
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  INSERT INTO StatusTable VALUES(SYSDATE, status);
  COMMIT;
END ReportStatus;
/
于 2012-10-30T09:20:28.287 に答える