3.3 サーバー上の出力のリダイレクトについて
Oracle JVMの出力先をさらに広範囲にわたって制御するために、SQL文にJava出力を渡すことができます。PL/SQLのパッケージDBMS_JAVA
は次の新しいファンクションを追加することで拡張され、これにより、以前はDBMS_JAVA.SET_OUTPUT
プロシージャでのみ使用可能であった機能が拡張されています。
set_output_to_sql
set_output_to_sql
は、デフォルトのSystem.out
およびSystem.err
への出力ストリームが発生すると、SQL文の実行命令で構成される指定の出力仕様を定義します。この仕様は、現在のセッションの期間内、またはremove_output_to_sql
ファンクションがそのIDでコールされるまで定義されます。Java出力がある場合、仕様で規定されたSQLアクションが実行されます。これを停止するにはdisable_output_to_sql
ファンクションをコールし、開始するにはenable_output_to_sql
ファンクションをコールします。このファンクションの戻り値は、正常に実行された場合はNULL、それ以外はエラー・メッセージになります。
FUNCTION set_output_to_sql (id VARCHAR2, stmt VARCHAR2, bindings VARCHAR2, no_newline_stmt VARCHAR2 default null, no_newline_bindings VARCHAR2 default null, newline_only_stmt VARCHAR2 default null, newline_only_bindings VARCHAR2 default null, maximum_line_segment_length NUMBER default 0, allow_replace NUMBER default 1, from_stdout NUMBER default 1, from_stderr NUMBER default 1, include_newlines NUMBER default 0, eager NUMBER default 0) return VARCHAR2;
表3-2に、set_output_to_sql
ファンクションが取る引数を示します。
表3-2 set_output_to_sqlの引数の概要
引数 | 説明 |
---|---|
id |
仕様の名前。同じセッションで複数の仕様を使用できますが、それぞれに個別のIDが必要です。このIDを使用して、 |
stmt |
Java出力が発生した場合に実行するデフォルトのSQL文。 |
bindings |
セットID、TEXT、LENGTH、LINENO、SEGNO、NLおよびERROUTからのトークンを含む文字列。この文字列は、SQL文
|
no_newline_stmt |
出力が改行で終わらない場合に実行するオプションの代替SQL文。 |
no_newline_bindings |
前述のbindings引数と同じ構文を使用する文字列。 |
newline_only_stmt |
出力が1つの改行の場合に実行するオプションの代替SQL文。 |
newline_only_bindings |
前述のbindings引数と同じ構文を使用する文字列。 |
maximum_line_segment_length |
指定されたSQL文の実行でバインドされる最大文字数。出力シーケンスが長い場合、識別可能なSEGNO値によって個々のコールに分けられます。値0は |
allow_replace |
同じIDの仕様が以前に定義されている場合の動作を制御します。値1は、古い仕様を置き換えます。0は、古い仕様を変更せずにエラー・メッセージを戻します。 |
from_stdout |
|
from_stderr |
|
include_newlines |
改行文字がテキストにバインドされる場合、それらの文字が出力に残るかどうかを制御します。値0は改行が含まれないことを示します。ただし、改行が存在するかどうかは、NLバインディングや |
eager |
改行で終了しない出力により、改行を受け取るたびにSQL文を実行するかどうかを制御するか、または、改行を受け取るまでこのような出力を蓄積します。値0は、終了しない出力が蓄積されることを示します。 |
remove_output_to_sql
remove_output_to_sql
は、set_output_to_sql
で作成された仕様を削除します。このような仕様がない場合は、エラー・メッセージが戻されます。
FUNCTION remove_output_to_sql (id VARCHAR2) return VARCHAR2;
enable_output_to_sql
enable_output_to_sql
は、set_output_to_sql
で作成された後、disable_output_to_sql
で無効化された仕様を再度有効にします。このような仕様がない場合は、エラー・メッセージが戻されます。現在、仕様が無効ではない場合、変更はありません。
FUNCTION enable_output_to_sql (id VARCHAR2) return VARCHAR2;
disable_output_to_sql
disable_output_to_sql
は、set_output_to_sql
で作成された仕様を無効にします。仕様を有効にするには、enable_output_to_sql
をコールします。無効になっている間、仕様で規定されたSQL文は実行されません。このような仕様がない場合は、エラー・メッセージが戻されます。仕様がすでに無効の場合、変更はありません。
FUNCTION disable_output_to_sql (id VARCHAR2) return VARCHAR2;
query_output_to_sql
query_output_to_sql
は、set_output_to_sql
で作成された仕様を説明するメッセージを戻します。このような仕様がない場合は、エラー・メッセージが戻されます。このファンクションにnull
を渡すと、既存のすべての仕様が表示されます。
FUNCTION query_output_to_sql (id VARCHAR2) return VARCHAR2;
Oracle JVMからの出力先を制御するには、自律型JavaセッションにJava出力を渡す方法もあります。これは、ディスク・ファイル、ソケットおよびURLなどの各種ターゲットに出力を伝播する一般的なメカニズムを提供します。ただし、出力を処理するJavaセッションはメイン・セッションとは論理的に異なるため、セッション間でその他の不要な相互作用はない点に注意する必要があります。これを実行するために、PL/SQLのパッケージDBMS_JAVA
には次のファンクションが用意されています。
set_output_to_java
set_output_to_java
は、デフォルトのSystem.out
およびSystem.err
への出力ストリームが発生すると、Javaメソッドを実行する命令を与える指定の出力仕様を定義します。仕様で規定されたJavaメソッドは、セッションの残りの部分とは別のJavaセッションの状態を持つ別のVMコンテキストで実行されます。
FUNCTION set_output_to_java (id VARCHAR2, class_name VARCHAR2, class_schema VARCHAR2, method VARCHAR2, bindings VARCHAR2, no_newline_method VARCHAR2 default null, no_newline_bindings VARCHAR2 default null, newline_only_method VARCHAR2 default null, newline_only_bindings VARCHAR2 default null, maximum_line_segment_length NUMBER default 0, allow_replace NUMBER default 1, from_stdout NUMBER default 1, from_stderr NUMBER default 1, include_newlines NUMBER default 0, eager NUMBER default 0, initialization_statement VARCHAR2 default null, finalization_statement VARCHAR2 default null)return VARCHAR2;
表3-3に、set_output_to_java
メソッドが取る引数を示します。
表3-3 set_output_to_javaの引数の概要
引数 | 説明 |
---|---|
class_name |
1つ以上のメソッドを定義するクラスの名前。 |
class_schema |
クラスが定義されるスキーマ。NULL値は、現行スキーマまたはPUBLICでクラスが定義されることを示します。 |
method |
メソッドの名前。 |
bindings |
メソッドの引数がバインドされる方法を定義する文字列。これは、 |
no_newline_method |
出力が改行で終わらない場合に実行するオプションの代替メソッド。 |
newline_only_method |
出力が1つの改行の場合に実行するオプションの代替メソッド。 |
initialization_statement |
出力を受け取るメソッドを最初に実行する前に、Javaセッションごとに1回実行されるオプションのSQL文。この文は、出力メソッドが実行されるのと同じJava VMコンテキストで実行されます。通常、このような文は、出力を受け取るメソッドが予定どおりに機能するように、別のVMコンテキストで条件を初期化するJavaストアド・プロシージャを実行する際に使用します。たとえば、このようなプロシージャは、出力メソッドによって書き込まれるストリームを開きます。 |
finalization_statement |
出力仕様が削除される直前、またはセッションが終了するときに1回実行されるオプションのSQL文。 |
remove_output_to_java
remove_output_to_java
は、set_output_to_java
で作成された仕様を削除します。このような仕様がない場合、エラー・メッセージが戻されます。
FUNCTION remove_output_to_java (id VARCHAR2) return VARCHAR2;
enable_output_to_java
enable_output_to_java
は、set_output_to_java
で作成された後、disable_output_to_java
で無効化された仕様を再度有効にします。このような仕様がない場合は、エラー・メッセージが戻されます。現在、仕様が無効ではない場合、変更はありません。
FUNCTION enable_output_to_java (id VARCHAR2) return VARCHAR2;
disable_output_to_java
disable_output_to_java
は、set_output_to_java
で作成された仕様を無効にします。仕様は、enable_output_to_java
で再度有効にできます。無効になっている間、仕様で規定されたSQL文は実行されません。このような仕様がない場合は、エラー・メッセージが戻されます。仕様がすでに無効の場合、変更はありません。
FUNCTION disable_output_to_java (id VARCHAR2) return VARCHAR2;
query_output_to_java
query_output_to_java
は、set_output_to_java
で作成された仕様を説明するメッセージを戻します。このような仕様がない場合は、エラー・メッセージが戻されます。このファンクションにnull
を渡すと、既存のすべての仕様が表示されます。
FUNCTION query_output_to_java (id VARCHAR2) return VARCHAR2;
set_output_to_file
set_output_to_file
は、デフォルトのSystem.out
およびSystem.err
に送信された出力ストリームを捕捉し、これを特定のファイルに追加する命令で構成された指定の出力仕様を定義します。これを実装するには、特殊なset_output_to_java
を使用します。引数file_path
は、出力の追加先のファイルのパスを指定します。引数allow_replace、from_stdout
およびfrom_stderr
は、set_output_to_sql
の同じ名前の引数と類似しています。
FUNCTION set_output_to_file (id VARCHAR2, file_path VARCHAR2, allow_replace NUMBER default 1, from_stdout NUMBER default 1, from_stderr NUMBER default 1) return VARCHAR2;
remove_output_to_file
このファンクションは、remove_output_to_java
と似ています。
FUNCTION remove_output_to_file (id VARCHAR2) return VARCHAR2;
enable_output_to_file
このファンクションは、enable_output_to_java
と似ています。
FUNCTION enable_output_to_file (id VARCHAR2) return VARCHAR2;
disable_output_to_file
このファンクションは、disable_output_to_java
と似ています。
FUNCTION disable_output_to_file (id VARCHAR2) return VARCHAR2;
query_output_to_file
このファンクションは、query_output_to_java
と似ています。
FUNCTION query_output_to_file (id VARCHAR2) return VARCHAR2;
次のDBMS_JAVA
ファンクションは、.trc
ファイルにJava出力が表示されるかどうかを制御します。
-
PROCEDURE enable_output_to_trc;
-
PROCEDURE disable_output_to_trc;
-
FUNCTION query_output_to_trc return VARCHAR2;
注意:
11gリリース1 (11.1)以前は、.trc
ファイルに表示されるJava出力は変更できませんでした。
SQL*Plusテキスト・バッファへの出力のリダイレクト
以前のリリースと同様、DBMS_JAVA
パッケージのプロシージャSET_OUTPUT
を使用して、SQL*Plusテキスト・バッファに出力をリダイレクトできます。
SQL> SET SERVEROUTPUT ON SQL> CALL dbms_java.set_output(2000);
最小(デフォルト)バッファ・サイズは2,000バイトで、最大サイズは1,000,000バイトです。次の例では、バッファ・サイズを5,000バイトに増やしています。
SQL> SET SERVEROUTPUT ON SIZE 5000 SQL> CALL dbms_java.set_output(5000);
出力は、コール終了時に表示されます。