サブファイル・トランザクション・ファイルの処理

PROCEDURE DIVISION ステートメントのうち、 特に ILE COBOL プログラムで TRANSACTION ファイルを処理するための拡張機能があるものをすべて以下に示します。 これらの各ステートメントに関する詳細については、「WebSphere Development Studio: ILE COBOL 解説書」を参照してください。

サブファイル・トランザクション・ファイルのオープン

PROCEDURE DIVISION で TRANSACTION ファイルを処理するためには、 まずそのファイルをオープンする必要があります。 TRANSACTION ファイルをオープンするには、形式 3 の OPEN ステートメントを使用します。 TRANSACTION ファイルは、I-O モードでオープンしてください。

OPEN I-O file-name.

プログラム装置の獲得

TRANSACTION ファイル用のプログラム装置を獲得する必要があります。 それを獲得したなら、入出力操作のためにそのプログラム装置を使用することができます。 プログラム装置は、暗黙のうちに獲得するか、または明示的に獲得します。

TRANSACTION ファイルをオープンすると、暗黙のうちに 1 つのプログラム装置を獲得します。 ファイルがディスプレイ・ファイルの場合、暗黙のうちに獲得される単一のプログラム装置は、CRTDSPF コマンドの DEV パラメーターの中の最初の項目によって決定されます。 それ以外のプログラム装置は、明示的に獲得しなければなりません。

プログラム装置を明示的に獲得するには、ACQUIRE ステートメントを使用します。 ディスプレイ・ファイルの場合、ACQUIRE ステートメントに指定する装置は、CRTDSPF コマンド、CHGDSPF コマンド、 または OVRDSPF コマンドの DEV パラメーターで指定する必要はありません。 しかし、ディスプレイ・ファイルを作成する場合には、獲得される装置の数 (デフォルトは 1) を指定する必要があります。 ディスプレイ・ファイルの場合、プログラム装置の名前はディスプレイ装置に一致していなければなりません。

ACQUIRE program-device-name FOR transaction-file-name.

サブファイル・トランザクション・ファイルへの書き込み

TRANSACTION ファイルをオープンして、そのためのプログラム装置を獲得すれば、それに対する入出力操作を実行するための準備は完了です。

TRANSACTION ファイルに対して実行する最初の入出力操作は、多くの場合、ディスプレイ装置にレコードを書き出すことです。 そのレコードは、ユーザーに対して応答や何らかのデータを入力するよう求めるプロンプトとして使用されます。

サブファイル TRANSACTION ファイルに論理レコードを書き込むには、形式 5 の WRITE ステートメントを使用します。 WRITE ステートメントは、次のように簡単にコーディングできます。

WRITE SUBFILE record-name FORMAT IS format-name.

TRANSACTION ファイルに関して、様式の異なる複数のデータ・レコードを活動状態にしたい場合があります。 そのような場合に TRANSACTION ファイルに書き込む出力データ・レコードの様式を指定するには、 形式 5 の WRITE ステートメントの FORMAT 句を使用しなければなりません。

TRANSACTION ファイル用に複数のプログラム装置を明示的に獲得した場合、 出力レコードの送り先のプログラム装置のサブファイルを指定するには、 形式 5 の WRITE ステートメントの TERMINAL 句を使う必要があります。

WRITE SUBFILE record-name
      FORMAT IS format-name
      TERMINAL IS program-device-name
END-WRITE.

形式 5 の WRITE ステートメントを使ってサブファイル TRANSACTION ファイルにレコードを入れる前後に、 形式 4 の WRITE ステートメントを使用することによって、サブファイル制御レコードをプログラム装置に書き込むことができます。 形式 4 の WRITE ステートメントを使って TRANSACTION ファイルに書き込む方法の説明については トランザクション・ファイルへの書き込みを参照してください。 サブファイル制御レコードに書き込むと、サブファイル制御レコード、サブファイル・レコード、あるいはその両方のいずれかが表示される場合があります。

サブファイル・トランザクション・ファイルからの読み取り

サブファイル制御レコードを読み込むには、形式 4 の READ ステートメントを使用します。 形式 4 の READ ステートメントを使って TRANSACTION ファイルを読み込む方法の説明については トランザクション・ファイルからの読み取りを参照してください。 サブファイル制御レコードを読み込むと、プログラム装置からのレコードが物理的に転送されて、それらがサブファイルで利用できるようになります。

サブファイルからレコードを使用できるようになったら、 形式 5 の READ ステートメントを使用することによって、 サブファイル TRANSACTION ファイルからの指定したレコードを読み込みます。 形式 5 の READ ステートメントを使用できるのは、サブファイル・レコードである様式を読み込む場合だけです。 通信装置の場合、それは使用できません。

READ ステートメントを使用する前に、TRANSACTION ファイルのために少なくとも 1 つのプログラム装置を獲得しておかなければなりません。 READ ステートメントが実行される時にプログラム装置が獲得されていないなら、ファイル状況が 92 に設定されることによって論理エラーが報告されます。

サブファイルは順次でもランダムでも読み込むことができます。

サブファイルを順次に読み取るには、形式 5 の READ ステートメントで NEXT MODIFIED 句を指定する必要があります。 NEXT MODIFIED 句を指定した場合、使用可能になるレコードは、サブファイル内で変更されている最初のレコードです。 サブファイル・レコードが変更されたことを示すマークを付ける方法については、 Web サイト http://www.ibm.com/eserver/iseries/infocenter にある iSeries Information Center の 「データベースおよびファイル・システム」カテゴリーを参照してください。

利用可能な修正されたサブファイル・レコードとして次のものがない場合、AT END 条件が生じ、ファイル状況は 12 に設定され、RELATIVE KEY データ項目の値がサブファイル中の最後のレコードのキーの値に設定されます。

サブファイルを順次に読み込む場合、形式 5 の READ ステートメントで AT END 句も指定する必要があります。 AT END 句では、AT END 条件の発生時に実行する命令ステートメントを指定することかできます。

READ SUBFILE subfile-name NEXT MODIFIED RECORD
     AT END imperative-statement
END-READ

サブファイルをランダムに読み込むには、RELATIVE KEY データ項目で、 読み込むサブファイル・レコードの相対レコード番号を指定する必要があります。 また、形式 5 READ ステートメントで NEXT MODIFIED 句を指定しないでください。 NEXT MODIFIED 句を指定していない場合は、次に利用できるレコードは、サブファイルのレコードのうち、RELATIVE KEY データ項目の値に対応する相対キー・レコード番号のレコードです。 READ ステートメントの実行時に、RELATIVE KEY データ項目の値がサブファイルの相対レコード番号に対応していないものであるなら、INVALID KEY 条件が生じます。

サブファイルをランダムに読み込む場合、形式 5 の READ ステートメントで INVALID KEY 句も指定する必要があります。 INVALID KEY 句では、INVALID KEY 条件の発生時に実行する命令ステートメントを指定することかできます。

READ SUBFILE subfile-name RECORD
     INVALID KEY imperative-statement
END-READ

READ 操作の実行方法の詳細な説明については、「WebSphere Development Studio: ILE COBOL 解説書」の『READ ステートメント』の部分を参照してください。

複数のプログラム装置を獲得した場合、READ ステートメントの TERMINAL 句の中で、どのプログラム装置からデータを読み取るかを明示的に指定することができます。

特定の様式でデータを受け取りたい場合には、その様式を READ ステートメントの FORMAT 句に指定することができます。 使用可能なデータが、要求されたレコード様式に合致しない場合、ファイル状況 9K が設定されます。

次に示すのは、TERMINAL 句および FORMAT 句を指定した READ ステートメントの例です。

READ SUBFILE subfile-name RECORD
     FORMAT IS record-format
END-READ
READ SUBFILE subfile-name RECORD
     TERMINAL IS program-device-name
END-READ
READ SUBFILE subfile-name RECORD
     FORMAT IS record-format
     TERMINAL IS program-device-name
END-READ

サブファイル・レコードの置換 (再作成)

サブファイル・レコードを読み込んで修正したら、REWRITE ステートメントを使用することによって、サブファイルの中でそれを置換することができます。

REWRITE SUBFILE record-name
        FORMAT IS record-format
        TERMINAL IS program-device-name
END-REWRITE

サブファイル内の置換されるレコードは、サブファイル中のレコードのうち、それ以前に正常に実行された READ 操作でアクセスされたレコードです。

プログラム装置のドロップ

TRANSACTION ファイル用に獲得したプログラム装置を使用し終えた時点で、それをドロップする必要があります。 プログラム装置をドロップするとは、その装置が TRANSACTION ファイルを使用した入出力操作では使えなくなるということです。 プログラム装置をドロップすると、その装置は他のアプリケーションから使用できるようになります。 プログラム装置は、暗黙のうちにドロップしたり明示的にドロップしたりすることができます。

TRANSACTION ファイルをクローズすると、そのファイルに付加されていたすべてのプログラム装置も暗黙のうちにドロップされます。

DROP ステートメントで指定することによって、プログラム装置を明示的にドロップすることができます。 ドロップされた装置は、必要に応じてそれを再獲得することができます。

DROP program-device-name FROM transaction-file-name.

サブファイル・トランザクション・ファイルのクローズ

サブファイル TRANSACTION ファイルの使用が終ったら、それをクローズしてください。 TRANSACTION ファイルをクローズするには、形式 1 の CLOSE ステートメントを使用します。 ファイルをクローズすると、そのファイルは、それを再びオープンするまで処理できなくなります。

CLOSE transaction-file-name.