構造化レコード

外部ファイル・レコードのレイアウトを適切に設定したり、データ・フィールドがパラメーター・バッファー内で適切な位置にあることを要求する外部プログラムを呼び出す場合に、構造化レコード定義を使用します。

構造化レコードには、次の特性があります。

構造化レコードを作成するときは、レベル番号を使用してストレージ内のレコード・フィールドのレイアウトを適切に指定します。

構造化レコード内のフィールドのタイプは、固定長でなければなりません。EGL は、構造化フィールド (構造化レコード・フィールド) 内で以下のタイプをサポートします。

構造化レコードの特殊なケースとして、可変長レコードがあります。この場合、EGL は変数を確認することによって、レコードのサイズを判別するために必要な情報を見つけます。詳しくは、可変長レコードを参照してください。

副構造化レコード

構造化レコード内の各フィールドは、副構造を持つ ことができます。つまり、より小さいフィールドの合計として宣言することができます。各フィールドに任意のレベル番号を割り当てます。レベル番号が大きいものは、副構造フィールドを表します。次の例では、電話番号を保持するフィールドを定義します。
Record CustomerRecord type BasicRecord
   10 phoneNumber CHAR(10); 
      20 areaCode CHAR(3); 
      20 localNumber CHAR(7);
end

このレコード・パーツ (myCustomer など) に基づいて変数を宣言し、 変数に情報を読み込むと、myCustomer.phoneNumber として電話番号全体にアクセスできます。 また、ドット構文 (例えば、myCustomer.phoneNumber.localNumber、またはもっと単純に、myCustomer.localNumber) を使用して、部分的な電話番号にアクセスすることができます。

フィールドとしての構造化レコード

次の例は、別の構造化レコードをフィールドとして含む 構造化レコードを示します。
record Outer
  5 a INT;
  5 b Inner;    // looks like a record, but is actually CHAR
end

record Inner
  10 c CHAR(10);
    15 c2 CHAR(10);
  10 d CHAR(10);
end
フィールド Outer.b は、レコードを参照 する Inner 型を使用して定義されています。一方、Outer.b の 実際の型は CHAR(20) です。CHAR フィールドの長さは、レコードの全長によって決定されます。Outer レコードは、代わりに、次のように定義することもできます。
record Outer
  5 a INT;
  5 b CHAR(20);
    10 c CHAR(10);
      15 c2 CHAR(10);
    10 d CHAR(10);
end

入出力での構造化レコード

構造化レコードは、階層データベース、メッセージ・キュー、または索引付きファイルなど、 特定の種類のデータ・アクセス・テクノロジーによって、入出力に使用される場合が最も多いケースです。 次のレコードのステレオタイプの場合、EGL は、フィールドにレベル番号が含まれていなくても構造化レコードを想定します。

ここでのベスト・プラクティスは、これらのレコードでレベル番号を使用して、構造化されていることを明確にすることです。詳しくは、このトピックの最後にある『関連参照』を参照してください。


フィードバック