質問

実行に数分かかる可能性のあるPL/SQL手順がいくつかあります。それらを開発している間、私はいくつかの印刷ステートメントを追加して、デバッグを支援し、いくつかのフィードバックと進行の指標を提供しました。当初、私はこれらを小さなテストセットで実行しましたが、出力はほぼ瞬時でした。実行に数分かかる大きなテストセットでテストしているので、プロシージャが終了するまで何も印刷されないため、コンソールへの印刷はもはや適切ではないことがわかります。私は、出力をバッファリングしてすぐに印刷しない環境で作業し、簡単なデバッグと診断のための簡単な印刷ステートメントを追加することに慣れています。

PL/SQLですぐに出力を印刷することは可能ですか(バッファリングされていません)?そうでない場合、同様の結果を得るために人々はどのような選択肢を推奨していますか?

役に立ちましたか?

解決

次のような自律トランザクションを使用して、テーブルにメッセージを書き込む手順を持つことができます。

procedure log (p_message)
is
    pragma autonomous_transaction;
begin
    insert into message_log (user, datetime, message)
    values (user, sysdate, p_message);
    commit;
end;

次に、別のOracleセッションからテーブルを監視します。

他のヒント

これには小さなトリックがあります。

DBMS_APPLICATION_INFO.SET_CLIENT_INFO( "いくつかの情報はここにある")を使用できます。いくつかの変数を作成し、「」内部の文字列を置き換えます。

そして、V $セッションからSelect Client_Infoを使用して、進行状況を監視します。

この目的のためにDBMS_PIPEを使用しています。名前付きパイプにメッセージを送信し、別のセッションから読み取ります。この方法は、ライティングおよび読み取りプロセスが別のノードに接続される場合がある場合、RAC環境では機能しない場合があります。

または、「Pragma autonomous_transaction」を使用して独自のセッションで実行される手順を使用して、テーブルにメッセージを挿入できます。これらのメッセージを別のセッションからクエリすることができます

編集:2番目のオプションがすでに言及されていることがわかります。

通常、2つのオプションがあります。

  • 出力をOracleテーブル(または一時テーブル)に送信します
  • utl_fileを使用して(データベースホスト)ファイルシステムに書き込みます

データベースホストへのOSアクセスがない場合でも、DBHOSTファイルシステムに書き込み、Oracleが外部から定義されたテーブルをファイルにバインドして、SELECTでクエリできるようにします。

クライアントツールに依存する場合があります。私はしばらくの間SQL*プラスを使用していませんが、PL/SQL開発者で手順をデバッグするとき、コマンドウィンドウを開いて発行します SET SERVEROUTPUT ON 指図。次に、手順を実行すると、によって印刷されたものは何でも DBMS_OUTPUT.PUT_LINE すぐに表示されます。

編集:あなたは正しい、私はそれを大量の出力などで見ただけだったと思います。とにかく私はオンラインでいくつかの検索をして、これに出会いました log4plsql - 便利かもしれません。

別の方法は、ログ情報を返すパイプライン関数を使用することです。例については、こちらをご覧ください。 http://berxblog.blogspot.com/2009/01/pipelined-function-vs-dbmsoutput.html パイプライン関数を使用する場合、別のSQLPLUS/TOAD/SQL開発者などを使用する必要はありません...セッション。

PL/SQL開発者のDBMSパイプとパイプビューアを使用して、パイプに入れられたときにすべてのインフォスを非同期的にキャッチできます。

誰かがそれを読む人がいるときにのみ物をパイプに入れるように注意してください。それ以外の場合、パイプがいっぱいになったときに通話が失敗します。

また、イベントを使用する可能性もあり、PL/SQL開発者にもイベントモニターがあります。そして、ドキュメントはそれを行う方法の例を提供する必要があります。

別のオプションは、PL/SQLに手順を呼び出して、ログメッセージが入ったメールを送信することです。これには、データベースに電子メールの送信機能があり、utl_smtpを使用して追加できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top