可変長レコードをサポートするプロパティー

レコード・パーツを宣言すると、可変長レコードの使用をサポートするプロパティーを含めることができます 順次ファイルへのアクセスには可変長シリアル・レコード、VSAM ファイルへのアクセスには可変長シリアル・レコードまたは可変長索引付きレコード、MQSeries® メッセージ・キューへのアクセスには可変長 MQ レコードをそれぞれ使用できます。

lengthItem プロパティーを持つ可変長レコード

lengthItem プロパティーがある場合、以下の場合に使用される項目を示します。
  • コードがファイルまたはキューからレコードを読み取るとき。長さ項目を使用して可変長レコードに読み取られたバイト数を受け取ります。
  • コードがレコードを書き込むとき。長さ項目を使用してファイルまたはキューに追加されたバイト数を指定します。
長さ項目は、次のいずれかになります。
  • 同じレコード内の構造項目
  • プログラムではグローバル、またはレコードにアクセスする関数ではローカルなレコード内の構造項目 (長さ項目はプログラムまたは関数で宣言されたレコード変数となります)。
  • プログラムにとってグローバルなデータ項目、またはレコ ードにアクセスする関数にとってローカルなデータ項目
長さ項目には以下のような特性があります。
  • BIN、DECIMAL、INT、NUM、または SMALLINT のプリミティブ型を持つ
  • 小数部を含まない
  • 桁数は最大 9 桁まで
lengthItem プロパティーを持つ可変長レコードの例は以下のとおりです。
  Record SerialRecordPart1 type serialRecord
    {
      fileName = "myFile",
      lengthItem = "myOtherField"
    }
    10 myField01 BIN(4);   // 2 バイト長
    10 myField02 NUM(3);   // 3 バイト長
    10 myField03 CHAR(20); // 20 バイト長
  end
長さ項目が文字項目でない場合、レコードの書き込み時、長さ項目の値は項目の境界を越える必要があります。例えば、SerialRecordPart1 型のレコードには長さ項目 myOtherField があり、2、5、6、7、...、24、25 に設定できます。myOtherField に 2 が設定されているレコードには、myField01 の値のみが含まれます。myOtherField に 5 が設定されているレコードには、myField01 および myField02 の値が含まれます。myOtherField に 6 から 24 が設定されているレコードには、myField03 のパーツの値も含まれます。

numElementsItem プロパティーを持つ可変長レコード

NumElementsItem プロパティーがある場合、コードがファイルまたはキューへの追加または更新を行う場合に使用する項目を示します。可変長レコードには、最終の最上位構造体項目として配列がある必要があります。要素項目数の値は、書き込みされる配列要素の実際の数を表します。値の範囲は、0 から最大値までです。この最大値は、レコード内の最後のトップレベル構造体項目の宣言で指定された occurs 値です。

書き出されたバイト数は、以下の合計となります。
  • レコードの固定長部分のバイト数
  • 要素項目の数の値に、最後の配列の各要素内のバイト数を乗算した値
要素項目数には以下のような特性があります。
  • BIN、DECIMAL、INT、NUM、SMALLINT のプリミティブ型を持つ
  • 小数部を含まない
  • 桁数は最大 9 桁まで
numElementsItem プロパティーを持つ可変長レコード・パーツの例は以下のとおりです。
  Record SerialRecordPart2 type serialRecord
    {
      fileName = "myFile",
      numElementsItem = "myField02"
    }
    10 myField01 BIN(4);   // 2 バイト長
    10 myField02 NUM(3);   // 3 バイト長
    10 myField03 CHAR(20)[3]; // 60 バイト長
       20 mySubField01 CHAR(10);
       20 mySubField02 CHAR(10);
  end
要素項目 myField02 に 2 が設定されている SerialRecordPart2 型のレコードを書き込みすると、myField01、myField02、および 2 つのオカレンス myField03 を持つ可変長レコードがファイルまたはキューに書き込まれます。

要素項目数は、可変長レコードの固定長パーツ内の項目の値と同じである必要があります。非修飾参照を使用して、要素項目数に名前を付けます。例えば、myRecord.myField02 ではなく myField02 を使用します。

要素項目の数は、ファイルからレコードを読み取っているときには無効です。

lengthItem プロパティーと numElementsItem プロパティーの両方を持つ可変長レコード

可変長レコードに lengthItem プロパティーと numElementsItem プロパティーの両方が指定されている場合、要素項目数を使用してレコード長が計算されます。計算されたレコード長は、レコードがファイルに書き込みされる前にレコード長項目に移動します。

呼び出しまたは転送で渡される可変長レコード

呼び出しで可変長レコードが渡される場合は、次のことが適用されます。
  • レコードに対して指定された最大長のスペースが予約されます。
  • callLink エレメントの値としてプロパティー type が remoteCall または ejbCall である場合、可変長項目は、レコード内部にある必要があります (長さ項目が存在する場合)。詳細については、『callLink エレメント』を参照してください。

同様に、可変長レコードが転送時に渡される場合は、レコードに指定された最大長に対するスペースが予約されます。

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.