目的
通常は標準出力ストリームに送信される内容を、BTEQがリダイレクトするファイルの名前を指定します。
構文
次の図は、メインフレーム接続とワークステーション接続の両方のシステムの構文を示します。
次のような場合に当てはまります。
- xxx
- 通常は標準出力ストリームに送られるデータを受け取る、z/OS JCLのDD文の名前、またはワークステーションのファイル名。
- BOM|NOBOM
- ワークステーション接続システムでは、Unicodeセッションで新しいMESSAGEOUTファイルの最初にBOM(バイト オーダー マーク)を挿入するかどうかを決定する。
BOMを指定すると、UTF-8またはUTF-16バイト オーダー マークが挿入されます。NOBOMを指定すると、挿入されません。 デフォルトはBOMになっています。
ファイルがすでに存在し、空でない場合には、このオプションは適用しません。 非Unicodeセッションやメインフレーム接続システムには使用しません。
このオプションは、メインフレーム接続システムには適用されません。標準出力は、Unicodeセッションの場合EBCDICで書き込まれるためです。
- RESET
- 標準出力を元のstdout/SYSPRINTストリームにリダイレクトします。これは端末画面、リダイレクトされるファイル、パイプ、または他のデバイスの場合があります。正常に終了すると、BTEQは上記のMESSAGEOUTファイルをクローズします。
使用上の注意
既存のファイルを指定した場合は、そのファイルにデータが付加されます。 新しいファイルを指定した場合は、ファイルが作成されます。 ファイル名には、システムで有効な任意のデバイス名を使用することができます。
- MESSAGEOUTコマンドで別のメッセージ ファイルが指定された場合
- MESSAGEOUTコマンドでRESETオプションが指定された場合
- EXITまたはQUITコマンド
最後のレコードの書き込みが終了するまでは、メッセージ ファイルはクローズされません。 クローズされる前のメッセージ ファイルを読んだ場合には、最後の数レコードが欠けている可能性があります。 これらのレコードは、MESSAGEOUT、EXIT、またはQUITコマンドが実行されてクローズされるときに、書き込まれます。
ワークステーション接続システムで、-mコマンド ライン オプションを指定してBTEQを起動すると、stdioはシステム ロケールをベースにしたものになります。 そのため、MESSAGEOUTファイルにはロケール固有の文字(UTF-8またはUTF-16-8でエンコードされた文字ではなく)が含まれることになり、BOMは含まれないことになります。
MESSAGEOUTコマンドがバッチ モードで失敗すると、BTEQはエラー メッセージを出力して終了します。MESSAGEOUTコマンドが対話型モードで失敗すると、上記のMESSAGEOUTファイルが存在する場合、BTEQは引き続き標準出力をこのファイルに書き込みます。このファイルが存在しない場合、標準出力はstdout/SYSPRINTストリームに書き込まれます。
例1 – MESSAGEOUT
z/OSで、メッセージをDDNAME MYOUTにリダイレクトするためには、MESSAGEOUTコマンドを次のように入れます。
.MESSAGEOUT DDNAME=MYOUT
DDNAMEは、TSOコマンドによって事前に定義されています。例えば、次のようになります。
.TSO ALLOCATE DDNAME(MYOUT) DSNAME(YOUR.MSG.OUT) SHR
例2 – MESSAGEOUT
ワークステーション接続システムで、標準出力をファイルOUT1にリダイレクトするためには、MESSAGEOUTコマンドを次のように入れます。
.MESSAGEOUT FILE=OUT1
標準出力をstdoutストリームに復元してOUT1ファイルを閉じるには、次のコマンドを使用します。
.MESSAGEOUT RESET
例3 – MESSAGEOUT
ワークステーション接続システムで、MESSAGEOUTコマンドを使用してBTEQの出力の一部を/dev/nullに送信することで、これを破棄することができます。インポートでは、通常、インポートされたレコードごとに数行の出力が生成されるため、出力ファイルが大容量になる場合があります。/dev/nullにリダイレクトしてからRESETオプションで復元することで、標準出力を削減することができます。
スクリプト コマンド:
.MESSAGEOUT FILE=/dev/null .IMPORT DATA FILE=mydata .REPEAT * USING c1 (VARCHAR(100)), c2 (VARCHAR(100)), c3 (VARCHAR(100)) INSERT INTO my_table1 VALUES (:c1, :c2, :c3); .MESSAGEOUT RESET SELECT 'Validate Inserts', count(*) from my_table1;
+---------+---------+---------+---------+---------+---------+ .MESSAGEOUT FILE=/dev/null *** Redirecting output messages to file /dev/null +---------+---------+---------+---------+---------+---------+ SELECT 'Validate Inserts', count(*) from my_table1; *** Query completed. One row found. 2 columns returned. *** Total elapsed time was 1 second. 'Validate Inserts' Count(*) ------------------ ----------- Validate Inserts 53285 +---------+---------+---------+---------+---------+---------+