web-dev-qa-db-ja.com

Oracle PL / SQL-即時出力/コンソール印刷のヒント

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

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セッションからテーブルを監視します。

18
Tony Andrews

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

dBMS_APPLICATION_INFO.set_client_info( "ここにいくつかの情報");を使用できます。いくつかの変数を作成し、 ""内の文字列を置き換えます。

そして、v $ sessionからselectclient_infoを使用して、進行状況を監視します。

9
Henry Gao

私はこの目的のためにdbms_pipeを使用してきました。名前付きパイプにメッセージを送信し、別のセッションからメッセージを読み取ります。この方法は、書き込みプロセスと読み取りプロセスが別のノードに接続する可能性がある場合、RAC環境では機能しない可能性があります。

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

編集:私の2番目のオプションはすでに言及されているようです。

2
Rene

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

1
tuinstoel

一般的に2つのオプションがあります:

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

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

1
dpbradley

クライアントツールによって異なる場合があります。しばらくSQL * Plusを使用していませんが、PL/SQL Developerでプロシージャをデバッグしているときに、コマンドウィンドウを開いてSET SERVEROUTPUT ONコマンドを発行します。次に、プロシージャを実行すると、DBMS_OUTPUT.PUT_LINEによって出力されたものがすぐに表示されます。

編集:あなたは正しいです、私はそれをより多くの出力か何かでしか見ていなかったと思います。とにかく私はオンラインで検索をして、これに出くわしました log4plsql -役に立つかもしれません。

1
Dan

PL/SQLDeveloperのDBMSPipeとPipeViewerを使用して、パイプに入れられたすべての情報を非同期的にキャッチできます。

誰かがそれを読むときだけ、物をパイプに入れるように注意してください。そうしないと、パイプがいっぱいになったときに呼び出しが失敗します。

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

1
Robert Giesecke

もう1つのオプションは、PL/SQLでプロシージャを呼び出して、ログメッセージを含む電子メールを送信することです。これには、データベースに電子メール送信機能が必要です。これは、UTL_SMTPを使用して追加できます。

0
Leigh Riffel