embed

Mit dem EGL-Schlüsselwort 'embed' können Sie die Felder eines strukturierten Datensatzes in einen zweiten strukturierten Datensatz aufnehmen, ohne eine Unterstruktur erstellen zu müssen. Ein SQL-Datensatz, der ein E/A-Objekt für den Zugriff auf relationale Datenbanken ist, muss eine solche flache Struktur haben.

Der einzige Grund für die Verwendung des Schlüsselworts embed anstelle eines Strukturfeldnamens ist es, dass so verhindert werden kann, dass eine Hierarchieebene hinzukommt. Für ein vom Schlüsselwort embed angegebenes Strukturfeld gelten folgende Beschränkungen:

Syntax

Syntaxdiagramm für die embed-Anweisung
Ebene
Eine Nummer für die Ebene im strukturierten Datensatz.
Datensatztyp
Der Name aus einer Datensatzdefinition. Die Felder aus dieser Definition werden an der aktuellen Position und auf der angegebenen Ebene eingefügt.

Beispiele

Im folgenden Beispiel fügt das Schlüsselwort embed alle Felder aus dem Datensatz address in record1 ein:
  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
Die interne Struktur des Datensatzabschnitts ist nun flach:
  Record record1 type serialRecord
  {
    fileName = "myFile"
  }
    10 person CHAR(30);
    10 streetAddress1 CHAR(30);
    10 streetAddress2 CHAR(30);
    10 city CHAR(20);
  end
Sie können das Schlüsselwort embed auch verwenden, um identische Strukturen in zwei Datensätzen zu deklarieren. Das Schlüsselwort überschreibt die Eigenschaften dieser Datensätze nicht mit den Eigenschaften aus dem eingebetteten Datensatz.
  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; // Akzeptiert die Struktur von 'common', 
                  // nicht die Eigenschaften
  end

  Record recordB type relativeRecord
  {
    fileName = "myOtherFile",
    keyItem = "a"
  }
    embed common;
  end
Die beiden letzten Datensatzabschnitte entsprechen diesen Deklarationen:
  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

Feedback