Ein DataTable-Abschnitt besteht aus einer Datensammlung in tabellarischer Form, die Sie in einer Anwendung zur Verfügung stellen können. Im Unterschied zu anderen Datenabschnitten deklarieren Sie jeden DataTable-Abschnitt in einer eigenen EGL-Quellendatei. Eine Datentabelle (DataTable) ist ein Hauptabschnitt, d. h., Sie müssen sie in einer Datei definieren, die keine anderen Hauptabschnitte enthält, und sie muss denselben Namen wie die Datei haben.
Fügen Sie eine Datentabelle (DataTable) in eine Anweisung use ein, damit sie für ein Programm, eine Bibliothek oder einen Handler sichtbar wird. Wenn Sie die Datentabelle (DataTable) nur als Nachrichtentabelle verwenden, können Sie die Datentabelle über die Eigenschaft msgTablePrefix des Programms mit dem Programm verbinden.
Der DataTable-Abschnitt hat eine erforderliche Eigenschaft contents, die eine zweidimensionale Feldgruppe mit Werten für die Tabelle angibt. Siehe DataTable-Eigenschaften und das Beispiel später in diesem Abschnitt.
Für jede Datenspalte, die Sie mit der Eigenschaft contents angeben, müssen Sie eine Variablendeklaration einfügen. Diese Variablendeklarationen sind Strukturfelder, die denen in einem strukturierten Datensatz ähneln (siehe Datensatzabschnitt). Strukturfelder haben immer eine feste Länge (beispielsweise sind keine STRING-Variablen mit nicht definierter Länge zulässig). Sie können eine Unterstruktur für diese Deklarationen angeben, indem Sie ein numerisches Präfix zuordnen. Andernfalls geht EGL davon aus, dass sich alle Felder auf derselben Ebene befinden. Sie können Inhalte nur für die Felder der höchsten Ebene in der Struktur angeben (diejenigen mit der niedrigsten Zahl für die Ebene), nicht für die Unterstrukturfelder. Weitere Informationen finden Sie in den Beispielen unten in diesem Abschnitt.

strTest = myDataTable.column3[4];
In diesem Beispiel enthält die STRING-Variable strTest den Wert aus Spalte 3, Zeile 4 der Datentabelle.
DataTable myErrorMessages type MsgTable
{ shared = yes }
msgNum INT;
msgText char(30);
{ contents = [
[ 101, "Datei nicht gefunden" ] ,
[ 102, "Lesefehler" ] ,
[ 103, "Schreibfehler" ] ]
}
end
Function displayError(index INT in)
strTest =
formatNumber(myErrorMessages.msgNum[index]) +
" " +
myErrorMessages.msgText[index];
sysLib.writeStdout(strTest);
end
102 Lesefehler
DataTable myDataTable type basicTable
{ shared = yes }
10 myColumn1 CHAR(10);
15 Column1A CHAR(5);
15 Column1B CHAR(5);
10 myColumn2 CHAR(10);
10 myColumn3 CHAR(10);
{ contents = [
[ "ABCDEFGHIJ", "row1 col2", "row1 col3" ] ,
[ "KLMNOPQRST", "row2 col2", "row2 col3" ] ,
[ "1234567890", "row3 col2", "row3 col3" ] ] }
end
writeStdOut(myDataTable.Column1B[1]); // zeigt FGHIJ an
In den meisten Umgebungen können Sie den Inhalt einer Datentabelle (DataTable) während der Ausführung ändern. Änderungen, die während der Ausführung durchgeführt werden, sind für alle Programme sichtbar, die Zugriff auf die Datentabelle (DataTable) haben. Sie bleiben erhalten, bis die Datentabelle entladen wird. Die Möglichkeit, diese Änderungen vorzunehmen, und die Sichtbarkeit dieser Änderungen für andere Programme in der Ausführungseinheit wird vom Zielsystem und der Eigenschaft shared beeinflusst. Das Entladen der Datentabelle (DataTable) wird vom Zielsystem und der Eigenschaft resident beeinflusst. Weitere Informationen finden Sie in DataTable-Eigenschaften.
DataTable myConstants type basicTable
10 myConstant1 INT;
10 myConstant2 CHAR(10);
{contents = [ [ 0, ""]]} // einzelne Zeile mit Anfangswerten
end
Anschließend könnten Sie die Datentabelle (DataTable)
über eine Datenbank oder Datei während der Ausführung ändern, wie
in folgendem Beispielcode gezeigt wird:get constantInfo;
myConstants.myconstant1[1] = constantInfo.myconstant1;
myConstants.myconstant2[1] = constantInfo.myconstant2;
Der Vorteil
dieses Verfahrens gegenüber dem Deklarieren von Konstanten in Ihrem Programm liegt darin,
dass Sie nur die Datenbank aktualisieren müssen, wenn sich die Daten ändern.
Die Konstanten in den einzelnen Programmen müssen nicht geändert werden.
Abhängig von der Umgebung kann diese Verwendung der Datentabelle (DataTable)
eine bessere Leistung ermöglichen als die Verwendung einer Bibliothek oder Datenbank. Beispiel: In CICS können Sie die Datentabelle (DataTable)
als resident definieren und sie während des Starts für eine CICS-Region
initialisieren.| Plattform | Problem |
|---|---|
| COBOL-Generierung | DataTable-Namen haben eine maximale Länge von sieben Zeichen. |
| JavaScript-Generierung | DataTable wird nicht unterstützt. |
| JSF-Handler | Einfügungen für Nachrichten in einer Datentabelle (DataTable) des Typs msgTable werden unterstützt. Die erste Einfügung ist {0}. |
| Text-UI | Einfügungen für Nachrichten in einer Datentabelle (DataTable) des Typs msgTable werden nicht unterstützt. |
| Webtransaktionen | Einfügungen für Nachrichten in einer Datentabelle (DataTable) des Typs msgTable werden unterstützt. Die erste Einfügung ist {1}. |