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