相対ファイルの処理

ILE COBOL 相対ファイルは、相対レコード番号によって処理されるファイルです。 相対レコード番号によってファイルを処理するには、そのファイルに対する SELECT ステートメントで ORGANIZATION IS RELATIVE を指定する必要があります。 相対ファイルに対しては、順次アクセス、レコード番号によるランダム・アクセス、または動的アクセスが可能です。 ILE COBOL 相対ファイルでは、キー順アクセス・パスは不可能です。

相対ファイルにアクセスする標準的な COBOL プログラムを作成するには、特定の特性のファイルを作成する必要があります。 表 25 に、それらの特性とそれを制御する方法を示します。

表 25. 標準的な COBOL プログラムからアクセス可能な相対ファイルの特性
特性 制御
ファイルは物理ファイルでなければならない。1 CRTPF コマンドを使用してファイルを作成する。
ファイルは共用ファイルにはできない。 CRTPF CL コマンドに SHARE(*NO) を指定する。
ファイルにキーを指定することはできない。 ファイルのデータ記述仕様 (DDS) の中に、位置 17 が K である行を含めない。
レコード検索の開始位置を指定することはできない。 POSITION パラメーターを指定した OVRDBF CL コマンドを出さないようにする。
ファイルに対して選択 / 除外レベル・キーワードを使用できない。 ファイル DDS の中に、位置 17 が S または O である行を含めないようにする。 COMP、RANGE、VALUES、または ALL のキーワードは指定しないようにする。
ファイル中のレコードを再使用できない。 CRTPF CL コマンドに REUSEDLT(*NO) を指定する。
ファイル中のレコードに NULL フィールドを含めることができない。 ファイル DDS に ALWNULL キーワードを指定しないようにする。
注:

1  メンバーが 1 つの物理ファイルに基づいている論理ファイルは、ILE COBOL 相対ファイルとして使用することができます。

相対ファイルに格納されているデータにアクセスするには、OPEN、READ、 WRITE、START、REWRITE、DELETE、および CLOSE ステートメントを使用します。 それらのステートメントのそれぞれについては、「WebSphere Development Studio: ILE COBOL 解説書」を参照してください。 START ステートメントは、INPUT または I-O 用にオープンされて、 順次アクセスまたは動的アクセスされるファイルにのみ適用されます。

順次アクセスされる相対ファイルの場合、START ステートメント以外では SELECT 文節の KEY 句は無視されます。 START ステートメントに KEY 句が指定されていない場合、SELECT 文節の RELATIVE KEY 句が使用され、KEY IS EQUAL であると見なされます。

相対ファイルがランダム・アクセスまたは動的アクセスされる場合、SELECT 文節の RELATIVE KEY 句が使用されます。

NEXT 句を指定できるのは、SEQUENTIAL または DYNAMIC アクセス・モードが指定されているファイルに対する READ ステートメントだけです。 NEXT が指定されている場合、SELECT 文節の KEY 句は無視されます。 RELATIVE KEY データ項目は、READ 操作での順次アクセスが指定されているファイルの相対レコード番号によって更新されます。

OUTPUT 用にオープンされている物理データベース・ファイルは、すべてクリアされます。 RELATIVE 編成のデータベース・ファイルのうち、動的またはランダム・アクセス・モードを指定されているものは、 削除されたレコードによっても初期設定されます。 動的またはランダム・アクセス・モードでアクセスされる非常に大きい相対ファイル (1,000,000 レコード以上) では、 削除されたレコードについてファイルが初期設定されるため、OPEN OUTPUT 処理に時間がかかるのが普通です。 初期設定の必要なファイルをオープンするのに必要な時間は、そのファイルの中のレコード数によって異なります。

ファイルに対する最初の OPEN ステートメントが OPEN OUTPUT ではない場合、 その相対ファイルを使う前に、ファイルをクリアし、削除されたレコードについて初期設定する必要があります。 INZPFM コマンドの RECORDS パラメーターは、*DLT に指定する必要があります。 ILE COBOL によってクリア操作と初期設定操作が処理される場合には指定変更が適用されますが、CL コマンドによって処理される場合は指定変更が適用されません。 詳細については、Web サイト http://www.ibm.com/eserver/iseries/infocenter にある iSeries Information Center の 「プログラミング」カテゴリーの中の『CL および API』セクションの CLRPFM および INZPFM コマンドの説明を参照してください。

順次アクセス・モードで OUTPUT 用にオープンされる新しい相対ファイルの処理は、これとは異なります。表 26 に、関係する条件をまとめます。

表 26. 相対出力ファイルの初期設定
ファイル・アクセスと CL の指定 オープン時の条件 クローズ時の条件 ファイル境界
順次 *INZDLT   書き込まれないレコードが初期設定される。1 すべて増分。
順次 *INZDLT *NOMAX サイズ   CLOSE は成功。1 ファイル状況は 0Q。2 書き込まれたレコードの境界まで。
順次 *NOINZDLT     書き込まれたレコードの境界まで。
ランダムまたは動的 レコードは初期設定される。 ファイルはオープン。   すべて増分。
ランダムまたは動的 *NOMAX サイズ OPEN 失敗。 ファイル状況は 9Q。3   ファイルは空。
注:
  1. CLOSE ステートメント実行時には、削除されたレコードについて初期設定すべきレコードが非常に多数 (1,000,000 以上) 残っている場合、時間がかかるのが普通です。
  2. ファイル・サイズを超えないようにしつつ、 現行のレコード数を超えてファイル境界を拡張するためには、 ファイルの処理の前に、INZPFM コマンドを使用することによって、削除されたレコードを追加してください。 0Q というファイル状況を受け取ったときに、それでもファイルにレコードを追加したい場合には、 このようにする必要があります。 相対ファイルを現在のサイズ以上に拡張しようとするどちらの試みも、 境界違反となります。
  3. 9Q のファイル状況から回復するためには、 関連する実行時メッセージ・テキストの説明に従って、CHGPF コマンドを使用してください。

RELATIVE 編成の ILE COBOL ファイルの場合、物理ファイル・メンバー再編成 (RGZPFM) CL コマンドによって、次のことができます。

さらに、REUSEDLT オプションを指定した物理ファイル変更 (CHGPF) CL コマンドでは、削除されたレコードの再使用が可能になるため、 ファイルの順次操作においてレコードの検索や書き込みの順序を変えることができます。