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

1 つのブロックに、複数のレコードを入れることができます。 入力レコードの非ブロック化と出力レコードのブロック化は、次の条件のもとで起こります。

  1. CRTCBLMOD または CRTBNDCBL コマンドの OPTION パラメーターで *NOBLK が設定されており (BLOCK CONTAINS 文節はある場合も ない場合もある)、また以下の条件のすべてが満たされている。
    1. ファイルに ACCESS IS SEQUENTIAL が指定されている。
    2. プログラムの中でファイルが INPUT または OUTPUT 用にオープンされている。
    3. ファイルが、DISK、DATABASE、DISKETTE、または TAPEFILE に割り当てられている。
    4. そのファイルに対して、START ステートメントが指定されていない。

    RELATIVE 相対編成の場合、OPEN OUTPUT でブロック化は実行されません。

    BLOCK CONTAINS を指定してもそれは無視されます。 ブロック化するレコード数は、システムが決めます。

  2. CRTCBLMOD コマンドまたは CRTBNDCBL コマンドの OPTION パラメーターに *BLK が指定されており (BLOCK CONTAINS 文節はある場合もない場合もある)、 かつ次の条件をすべて満たしている。
    1. ファイルに ACCESS IS SEQUENTIAL または ACCESS IS DYNAMIC が指定されている。
    2. プログラムの中でファイルが INPUT または OUTPUT 用にオープンされている。
    3. ファイルが、DISK、DATABASE、DISKETTE、または TAPEFILE に割り当てられている。

    RELATIVE 相対編成の場合、OPEN OUTPUT でブロック化は実行されません。

    BLOCK CONTAINS 文節は、ブロック化されるレコード数を制御します。 DISKETTE ファイルの場合は、ブロック化するレコード数は常にシステムが決めます。

上記のすべての条件を満たしている場合でも、 特定のオペレーティング・システムの制約事項のために、ブロック化や非ブロック化が行われないことがあります。 この場合、際立ったパフォーマンスの向上はありません。

直接アクセス索引ファイルを使用している場合は、READ PRIOR および READ NEXT を使用してブロック化を実行できます。 READ PRIOR および READ NEXT を使用してブロック化を実行する際には、 ブロックにレコードが残っている間に宛先を変更することはできません。 レコードをブロックからクリアするには、ランダム READ またはランダム START などのランダム操作を指定するか、 あるいは順次 READ FIRST または READ LAST を使用してください。

正しくない宛先変更が行われると、ファイル状況 9U になります。 ファイルをクローズして再オープンしないと、それ以上の入出力は行えません。

OVRDBF コマンドに SEQONLY(*NO) を指定すると、実行時にブロック化を指定変更できます。

ディスクおよびデータベース・ファイルの場合は、BLOCK CONTAINS が使用され、 ブロック化因数としてゼロが指定されるかまたは計算される場合、システムがブロック化因数を決めます。

指定したブロック化因数が変更される場合があります。

レコードのブロックの読み書きが行われる場合、入出力フィードバック域にブロックの中のレコード数が記述されます。 ILE COBOL によって複数のレコードのブロック化または非ブロック化が行われるファイルの場合、I-O-FEEDBACK 域は、読み取りまたは書き込みごとには更新されません。 その次のブロックが読み書きされる時点で更新されます。

ブロック化が有効なデータベース・ファイルの場合、さまざまなプログラムで変更が行われると、 変更された時点ですべての変更内容を参照できないことがあります。

ファイルに代替レコード・キーがある場合は、ブロック化は暗黙的に使用不可となります。

データベース・ファイルに変更を加える際のブロック化の影響、およびブロック化因数の変更については、Web サイト http://www.ibm.com/eserver/iseries/infocenter にある iSeries Information Center の「データベース」カテゴリーを参照してください。