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