Im Kontext von DL/I ruft die EGL-Anweisung 'get' ein einzelnes Segment in einer DL/I-Datenbank ab.
Die Anweisung schließt die Option 'forUpdate' ein, mit der Sie die gespeicherten Daten zu einem späteren Zeitpunkt in Ihrem Code ersetzen oder löschen können. Sie können diese Anweisung auch verwenden, um eine Gruppe von DL/I-Segmenten abzurufen und den Inhalt jedes nachfolgenden Segments in den nächsten DLISegment-Datensatz einer dynamischen Feldgruppe zu stellen.
Die Anweisung 'get' generiert eine DL/I-Anweisung 'get unique' (GU). Die Anweisung 'get...forUpdate' generiert eine DL/I-Anweisung GHU.
Ein Beispiel zur Verwendung der Anweisung 'get...forUpdate' mit DL/I finden Sie unter Hinweise zur Anweisung 'delete' mit DL/I.
get myCustomer, myLocation, myOrder;
EGL
generiert aus dieser Anweisung den folgenden DL/I-Pseudocode:GU STSCCST*D (STQCCNO = :myCustomer.customerNo)
STSCLOC*D (STQCLNO = :myLocation.locationNo)
STPCORD
Wenn Sie eine dynamische Feldgruppe aus DLISegment-Datensätzen als Objekt der Anweisung 'get' angeben, generieren Sie einen DL/I-Aufruf GU (get unique) für den ersten Datensatz in der Feldgruppe und einen Aufruf GN (get next) für jeden nachfolgenden Datensatz in der Feldgruppe. Wenn für die Feldgruppe keine Anzahl an Elementen angegeben ist, generiert die Anweisung so lange GN-Aufrufe, bis das Ende der DL/I-Datei erreicht ist oder bis ein Fehlercode auftritt.

Die Anweisung 'get next' generiert eine DL/I-Anweisung GN. Die Anweisung 'get next...forUpdate' generiert eine DL/I-Anweisung GHN. Die Anweisung liest das Segment, das unmittelbar auf das aktuelle Segment in der hierarchischen Reihenfolge folgt. Hierarchische Reihenfolge bedeutet, dass der Datenbankmanager beim Stammsegment beginnt und dann den Lesevorgang entlang der Hierarchie von oben nach unten so lange fortsetzt wie möglich, indem das erste untergeordnete Segment des ersten untergeordneten Segments gelesen wird usw., bis die unterste Ebene der Hierarchie erreicht wird. Anschließend wird der Lesevorgang nach oben fortgesetzt, bis ein paralleles untergeordnetes Element gefunden wird, das bisher noch nicht gelesen wurde. Dieses Segment wird dann mit allen untergeordneten Segmenten gelesen.
DL/I unterstützt auch die Verwendung von Pfadaufrufen in get next-Anweisungen. Dies bedeutet, dass Sie übergeordnete Segmente für alle Segmentebenen zwischen dem Segment auf der niedrigsten Ebene und dem Stammelement lesen können.
// Definition von DLISegment-Datensätzen mithilfe der Eigenschaft 'hostVarQualifier'
Record CustomerRecordPart type DLISegment
{ segmentName="STSCCST", keyItem="customerNo", hostVarQualifier="myCustomer" }
...
end
Record LocationRecordPart type DLISegment
{ segmentName="STSCLOC", keyItem="locationNo", hostVarQualifier="myLocation" }
...
end
Record OrderRecordPart type DLISegment
{ segmentName="STPCORD", keyItem="orderDateNo", hostVarQualifier="myOrder" }
...
end
//Erstellung von Variablen für die Datensätze
myCustomer CustomerRecord;
myLocation LocationRecord;
myOrder OrderRecord;
//Erstellung eines Segmentsucharguments
myCustomer.customerNo = "005001";
myLocation.locationNo = "000022";
myOrder.orderDateNo = "20050730A003";
set myOrder position;
//Bestellungen (Orders) in einer Schleife durchlaufen
while (myOrder not noRecordFound)
try
get next myOrder;
onException
myErrorHandler(2);
end // Ende des try-Blocks
end // Ende von 'while'
GU STSCCST (STQCCNO = :myCustomer.customerNo)
STSCLOC (STQCLNO = :myLocation.locationNo)
STPCORD (STQCODN = :myOrder.orderDateNo)
Nach dem ersten Durchlaufen der Schleife verwendet EGL einen Aufruf GN.
Wenn Sie eine dynamische Feldgruppe aus DLISegment-Datensätzen als Objekt der Anweisung 'get next' angeben, generieren Sie einen DL/I-Aufruf GN (get next) für jeden Datensatz in der Feldgruppe. Wenn für die Feldgruppe keine Anzahl an Elementen angegeben ist, generiert die Anweisung so lange GN-Aufrufe, bis das Ende der DL/I-Datenbank erreicht ist oder bis ein Fehlercode auftritt. Um in dieser Situation ein besser vorhersehbares Verhalten zu erreichen, verwenden Sie die Anweisung 'get next inParent'.
Die Anweisung 'get next inParent' generiert eine DL/I-Anweisung GNP (wenn kein Änderungswert 'forUpdate' vorliegt) bzw. eine Anweisung GHNP (wenn ein Änderungswert 'forUpdate' vorliegt). Die Anweisung liest das nächste untergeordnete Segment, das dasselbe übergeordnete Segment aufweist wie das Segment an der aktuellen Datenbankposition. Sie können den Änderungswert 'next inParent' auch verwenden, um eine Gruppe von DL/I-Segmenten für eine dynamische Feldgruppe abzurufen.
emp.empnum = 1; // Legt den Schlüssel im Datensatz 'emp' (Mitarbeiter) fest
try
get emp forUpdate;
onException(dex DLIException)
myErrorHandler(dex); // beendet das Programm
end
emp.empname = emp.empname + " Smith";
try
replace emp;
onException(dex DLIException)
myErrorHandler(dex);
end
| Plattform | Problem |
|---|---|
| CICS für z/OS | Die Position für 'get' geht in den folgenden Fällen verloren:
|