embed

EGL の embed キーワードでは、副構造を作成することなく、ある構造化レコードのフィールドを 2 番目の構造化レコードに含めることができます。 リレーショナル・データベース・アクセス用の I/O オブジェクトである SQL レコードでは、そのようなフラットな構造にする必要があります。

構造化フィールド名の代わりに embed キーワードを使用する唯一の理由は、階層のレベルの追加を回避することにあります。 embed キーワードによって識別される構造化フィールドには、以下の制約事項があります。
  • レコード・パーツのフォーマットを指すことはできるが、データ項目パーツは指すことができない
  • 配列の指定、またはプリミティブ型指定の組み込みができない

構文

embed ステートメントの構文図
level
構造化レコード内のレベル番号。
recordType
レコード定義からの名前。 この定義からのフィールドは、現在位置および指定された level に組み込まれます。

以下の例では、キーワード embed によって address レコードからのすべてのフィールドが record1 に組み込まれます。
  Record address type basicRecord
    10 streetAddress1 CHAR(30);
    10 streetAddress2 CHAR(30);
    10 city CHAR(20);
  end

  Record record1 type serialRecord
  {
    fileName = "myFile"
  }
    10 person CHAR(30);
    10 embed address;
  end
これで、以下のようにレコード・パーツの内部構造がフラットになります。
  Record record1 type serialRecord
  {
    fileName = "myFile"
  }
    10 person CHAR(30);
    10 streetAddress1 CHAR(30);
    10 streetAddress2 CHAR(30);
    10 city CHAR(20);
  end
また、embed キーワードは、2 つのレコード内に同じ構造を宣言する場合にも使用できます。 このキーワードでは、組み込まれたレコードからのプロパティーでこれらのプロパティーを上書きすることはありません。
  Record common type serialRecord
  {
    fileName = "mySerialFile"
  }
    10 a BIN(10);
    10 b CHAR(10);
  end

  Record recordA type indexedRecord
  {
    fileName = "myFile",
    keyItem = "a"
  }
    embed common; // 共通の構造を受け付け、
                  // プロパティーは受け付けません
  end

  Record recordB type relativeRecord
  {
    fileName = "myOtherFile",
    keyItem = "a"
  }
    embed common;
  end
最後の 2 つのレコード・パーツは以下の宣言と同等です。
  Record recordA type indexedRecord
  {
    fileName = "myFile",
    keyItem = "a"
  }
    10 a BIN(10);
    10 b CHAR(10);
  end

  Record recordB type relativeRecord
  {
    fileName = "myOtherFile",
    keyItem = "a"
  }
    10 a BIN(10);
    10 b CHAR(10);
  end