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

フィードバック