RECORDING MODE 節は、QSAM ファイル内の物理レコードのフォーマットを指定します。VSAM ファイルではこの節は無視されます。
RECORDING MODE で使用できる値は次のとおりです。
- レコード・モード F (固定長)
- ファイル内のレコードはすべて同一の長さで、
それぞれのレコードは 1 つのブロック内に完全に含まれています。
ブロックには複数のレコードを含めることが可能であり、
多くの場合、1 ブロックのレコード数は一定しています。
このモードには、
レコード長フィールドやブロック記述子フィールドはありません。
- レコード・モード V (可変長)
- レコードは固定長または可変長であり、
各レコードは 1 つのブロック内に完全に含まれなければなりません。
ブロックには複数のレコードを含めることができます。
各データ・レコードにはレコード長フィールドが含まれており、
各ブロックにはブロック記述子フィールドが含まれています。
これらのフィールドは、データ部には記述されません。これらのフィールドの長さはそれぞれ 4 バイトであり、
それは自動的に用意されます。
これらのフィールドを利用することはできません。
- レコード・モード U (固定長または可変長)
- レコードは固定長か可変長のいずれかです。
しかし、各ブロックのレコードは 1 つだけです。
レコード長フィールドやブロック記述子フィールドはありません。
RECORDING MODE U は、
BLOCK CONTAINS 節を使用している場合には使用できません。
- レコード・モード S (スパン)
- レコードは、可変長または固定長のどちらかであり、
1 ブロックより大きい場合も可能です。
1 つのレコードが 1 ブロック内の残りのスペースよりも大きい場合、
そのブロックの残りのスペースを埋める分だけ、
そのレコードの一部が書き込まれます。
レコードの残りの部分は次のブロックに保管されます (必要なら次の複数のブロックにわたって保管されます)。
利用できるのは完全なレコードだけです。
あるブロックの中のレコードの各セグメントには、
それがそのレコード全体であるとしても、セグメント記述子フィールドが含まれ、
各ブロックにはブロック記述子フィールドが含まれます。
これらのフィールドはデータ部には記述されていません。それは自動的に用意されます。
これらのフィールドを利用することはできません。
レコード・モード S を使用する場合は、
BLOCK CONTAINS CHARACTERS 節が指定されていなければなりません。
レコード・モード S は、ASCII ファイルでは使用することができません。
QSAM ファイルで RECORDING MODE 節を指定しない場合、Enterprise COBOL コンパイラーがレコード・モードを次のように決定します。
- F
- そのファイルに関連付けられたレベル 01 の最大のレコードが、
BLOCK CONTAINS 節の中に指定されたブロック・サイズ以下である場合、
コンパイラーはレコード・モードを F にします。
この場合、次のいずれかのようにします。
- RECORD CONTAINS integer 節を使用します。(詳細については、「Enterprise COBOL コンパイラーおよび実行時プログラム 移行ガイド」を参照してください。)
- RECORD 節を省き、
そのファイルに関連したすべてのレベル 01 のレコードが同じサイズであり、
OCCURS DEPENDING ON 節の指定されたレコードがないことを確認します。
- V
- そのファイルに関連付けられたレベル 01 の最大のレコードが、
BLOCK CONTAINS 節の中に指定されたブロック・サイズよりも大きくない場合、
コンパイラーはレコード・モードを V にします。
この場合、次のいずれかのようにします。
- RECORD IS VARYING 節を使用します。
- RECORD 節を省き、そのファイルに関連したすべてのレベル 01 のレコードが同じサイズではなく、OCCURS DEPENDING ON 節の指定されたレコードがあることを確認します。
- ファイルに関連したレベル 01 レコードの最小の長さを整数-1 に、最大の長さを整数-2 に指定して、RECORD CONTAINS 整数-1 TO 整数-2 節を使用します。
これら 2 つの整数の値は違う値であり、
異なる長さのレコードまたは OCCURS DEPENDING ON 節の指定されたレコードのどちらかの
最小値と最大値に一致した値でなければなりません。
- S
- 最大のブロック・サイズが最大のレコード・サイズより小さい場合、
コンパイラーはレコード・モードを S にします。
- U
- レコード・モード U は、デフォルトでは決して指定されません。
RECORDING MODE U 節は、モード U の記録を取得するように
明示的に指定しなければなりません。