レコードのブロック化および非ブロック化

デフォルトでは、RPG コンパイラーは次の条件が一致した時に、 入力レコードを非ブロック化し、出力レコードをブロック化して、 SEQ または DISK ファイルにおける実行時のパフォーマンスを向上 します。

  1. ファイルがプログラム記述であるか、あるいは外部記述の場合には、1 つだ けのレコード様式をもっている。
  2. ファイル仕様書にキーワード RECNO が使用されていない。
    注:
    RECNO を使う場合、ILE RPG コンパイラーはレコードのブロック化を許可しません。ただし、ファイルが入力ファイルで RECNO が使われると、高速順次アクセスが設定される場合、 データ管理は依然、レコードをブロック化することがあります。 この場合、更新された レコードは直ちには見られなくなります。
  3. 次の 1 つが真である。
    1. ファイルが出力ファイルである。
    2. ファイルが入出力共用ファイルの場合には、配列または テーブル・ファイルである。
    3. ファイルが入力専用ファイルである。これは、レコード・アドレス・ファイルでないか、 またはレコード・アドレス・ファイルによって処理されないということです。OPEN、CLOSE FEOD、 および READ ファイル命令だけを使用します (換言すると、ファイル命令の READE、READPE、SETGT、 SETLL、および CHAIN は許可されません)。

RPG コンパイラーは、 上記の条件を満たすすべての SEQ または DISK ファイルのレコードをブロック化および非ブロック化するための、 オブジェクト・プログラム・コードを生成します。 特定の i5/OS システム制約事項により、ブロック化および非ブロック化が妨げられることがあります。 その場合には、パフォーマンスは改良されません。

ファイルのファイル仕様書にキーワード BLOCK(*YES) を指定することによって レコードのブロック化を明示的に要求することができます。デフォルトのレコードのブロック化と ユーザーが要求したレコードのブロック化との相違点は、入力ファイルに BLOCK(*YES) が指定されている時には、入力ファイルで命令 SETLL、 SETGT、および CHAIN を使用することができ (上記の 3c に示されている条件を参照)、ブロック化が行われる ことです。BLOCK キーワードが指定されておらず、これらの命令を使用した場合には、 レコードのブロック化は行われません。

また、ファイル仕様書にキーワード BLOCK(*NO) を指定することによって デフォルトのレコードのブロック化を 防止することができます。 BLOCK(*NO) を指定した場合には、コンパイラーによっても、データ管理によっ てもレコードのブロック化は行われません。キーワード BLOCK が指定されていない場合には、 デフォルトのブロック化が 上で説明したとおり行われます。

ファイル情報データ構造の入出力および装置固有のフィードバックは、 レコードが RPG コンパイラーによってブロック化および非ブロック化されるファイル の各読み取りまたは書き出し後に (ブロック読み取りでの RRN およびキー情報を除く)、 更新されません。 フィードバック域は、レコード・ブロックが転送されるたびに更新されま す。 (ファイル情報データ構造について詳しくは 、「WebSphere Development Studio: ILE RPG 言語解説書」を参照してください。)

ファイルのブロック化および非ブロック化を防止することによって、有効な 更新フィードバック情報を獲得することができます。 ブロック化を防止するためには、次の方法の 1 つを使用してください。