Hinweise zur Anweisung 'add' mit DL/I

Wenn Sie die Anweisung 'add' im Kontext von DL/I verwenden, fügt diese Anweisung ein Segment oder eine Gruppe von Segmenten zu einer hierarchischen Datenbank hinzu.

Sie können die Anweisung 'add' auch dazu verwenden, mehrere Segmente aus einer dynamischen Feldgruppe von DLISegment-Datensätzen in eine DL/I-Datenbank zu stellen.

Die Anweisung 'add' generiert eine DL/I-Anweisung ISRT für Einfügungen. In DL/I findet eine solche Einfügung an der aktuellen Position in der Datenbank statt. Diese Positionierung kann anhand einer der folgenden Methoden gesteuert werden:
Um eine dynamische Feldgruppe von DLISegment-Datensätzen zu Ihrer Datenbank hinzuzufügen, gehen Sie wie folgt vor:
  1. Wenn es sich bei der dynamischen Feldgruppe von DLISegment-Datensätzen nicht um eine Feldgruppe von Stammsegmenten handelt, erstellen Sie in der Datenbank die Position für das übergeordnete Segment, unter dem die Datensätze eingefügt werden sollen.
  2. Geben Sie die Anweisung 'add' aus und geben Sie den Namen der dynamischen Feldgruppe von DLISegment-Datensätzen an. Anhand des Schlüsselwerts in jedem Datensatz der Feldgruppe wird die logische Position bestimmt, an der das neue Segment der Datenbank hinzugefügt wird.

Syntax

Syntaxdiagramm für die Anweisung 'add' mit DL/I
DLISegment-Variable
Name der DLISegment-Variablen.
usingPCB PCB-Name
Option zum Angeben des Namens eines Programmkommunikationsblocks (PCB) gemäß Definition in Ihrem PSB-Datensatz (Programmspezifikationsblock), um diesen PCB anstelle des standardmäßigen PCB zu verwenden.
with #dli{ DL/I-Anweisung }
Option zum Durchführen eines expliziten DL/I-Aufrufs ISRT (siehe Direktive '#dli'). Zwischen '#dli' und der linken geschweiften Klammer darf kein Leerzeichen stehen.
Dynamische_DLI-Feldgruppe
Name einer dynamischen Feldgruppe, die aus DLISegment-Datensätzen besteht.

Pfadaufrufe

DL/I unterstützt auch die Verwendung von Pfadaufrufen in add-Anweisungen. Bei Verwendung von Pfadaufrufen können Sie übergeordnete Segmente für alle Segmentebenen zwischen dem Segment auf der niedrigsten Ebene und dem Stammelement hinzufügen. Im folgenden Beispiel fügt DL/I einen neuen Kunden (Customer) und einen neuen Standort (Location) sowie gleichzeitig eine neue Bestellung (Order) hinzu:
add myCustomer, myLocation, myOrder;
EGL generiert anhand dieser Anweisung den folgenden Pseudo-DL/I-Code:
ISRT STSCCST*D (STQCCNO = :myCustomer.customerNo) 
     STSCLOC (STQCLNO = :myLocation.locationNo) 
     STPCORD

Beispiel

Im folgenden Beispiel wird der Kundendatenbank eine Bestellung hinzugefügt:
// Definition von DLISegment-Datensätzen mithilfe der Eigenschaft 'hostVarQualifier'
Record CustomerRecord type DLISegment
{ segmentName="STSCCST", keyItem="customerNo", hostVarQualifier="myCustomer" }
...
end
Record LocationRecord type DLISegment
{ segmentName="STSCLOC", keyItem="locationNo", hostVarQualifier="myLocation" }
...
end
Record OrderRecord 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 Suchparameters für Segmente
	myCustomer.customerNo = "005001";
	myLocation.locationNo = "000022";

	//Füllen der Felder im Bestellungsdatensatz
	fillOrder(myOrder);
	
	//Hinzufügen des neuen Bestellungsdatensatzes
	try
		add myOrder;
		onException(dex DLIException)
			myErrorHandler(dex);
	end
Diese Anweisung 'add' erstellt den folgenden Pseudo-DL/I-Code:
ISRT STSCCST (STQCCNO = :myCustomer.customerNo) 
     STSCLOC (STQCLNO = :myLocation.locationNo) 
     STPCORD

Qualifizierte Segmentsuchparameter (SSAs) für Kunden (Customer) und Standort (Location) identifizieren die übergeordneten Segmente für das neue Bestellsegment (Order). DL/I fügt das neue Bestellsegment an einer Position hinzu, die durch das Schlüsselelementfeld (keyItem) für dieses Segment, orderDateNo (STQCODN), bestimmt wird.

Hinweise zu Fehlern

Um sporadisch auftretende E/A-Fehler wie beispielsweise "noRecordFound" (kein Datensatz gefunden) zu erfassen, verwenden Sie einen SET-Werteblock, um die Programmeigenschaft 'throwNrfEofExceptions' auf YES zu setzen. Führen Sie im onException-Block einen Test auf die Fehler mit dem Operator 'is' oder 'not' durch:
	if (myOrder is unique)
		...
	end
Folgende Laufzeitfehler können möglicherweise auftreten:
  • 'unique', wenn ein Bestellsegment mit dem angegebenen Schlüssel bereits vorhanden ist, aber doppelte Einträge nicht zulässig sind.
  • 'duplicate', wenn ein Bestellsegment mit demselben Schlüssel bereits vorhanden ist, aber doppelte Einträge zulässig sind.

Feedback