Auswählen oder Löschen aus Listenobjekten anhand Bedingung

Diese Funktionalität wird ab V9.09 nicht mehr unterstützt.

Diese Diese Funktionalität ist nicht auf allen Plattformen unterstützt.

EXEC TAA
   COPYLIST <Objektname-1> TO <Objektname-2>
   WHERE <bedingung>
END-EXEC

EXEC TAA
   DELETELIST <Objektname>
   WHERE <bedingung>
END-EXEC

Mit den beschriebenen Anweisungen beauftragen Sie die Infrastruktur, ein Listenobjekt zu bearbeiten, indem für alle Einträge, auf die die angegebene Bedingung zutrifft, eine Aktion ausgeführt wird.

Zur Zeit implementiert sind die Aktionen „Copylist“ und „DeleteList“:

  • CopyList kopiert alle Einträge aus <Objektname-1>, auf die die <Bedingung> zutrifft, in das Objekt <Objektname-2>. Dabei wird jeder ggf. bereits vorhandene Inhalt aus <Objektname-2> zuvor gelöscht. Das Objekt <Objektname-2> enthält also nach der Operation ausschließlich Einträge, die aus <Objektname-1> stammen und der <Bedingung> entsprechen.
  • Deletelist entfernt aus dem angebenen Objekt alle Einträge, die der <Bedingung> entsprechen.

Die <Bedingung> entspricht von der Syntax her den Bedingungen, wie sie in CTV-Pseudocode (also in KnowlEdge) verwendet werden.

Allerdings sind nicht alle dort vorhandenen Möglichkeiten zulässig, da nicht alle Abfragen von der für COBOL verfügbaren Infrastruktur (auch unter MVS) verfügbar sind:

  • Die Bedingung muss sich auf den Objektinhalt beziehen; STATUS, EVENT, OBJECT EXISTS oder RETURNED sind nicht zulässig.
  • Built-in Functions dürfen nicht verwendet werden.

Außerdem sind folgende Punkte unbedingt zu beachten:

  • Die Angabe von Feldern in TAA-Objekten erfolgt im CTV-Pseudocde-Format, d.h. Objektname und Feldname werden durch einen Punkt getrennt:
  <objektname>.<feldname>

An dieser Syntax erkennt die Syntaxprüfung, dass es sich um ein Feld in einem TAA-Objekt handelt, im Gegensatz zu einer selbst definierten COBOL-Variablen.

Wenn ein Feld aus einem TAA-Objekt zu einem Vergleich verwendet wird, so wird der Feldinhalt verwendet, der zum Zeitpunkt des Vergleichs in der Infrastruktur vorliegt, also beim letzten PUT übergeben wurde. Änderungen am Objektinhalt, die nicht durch einen PUT übergeben wurden, haben folglich keine Wirkung.

Auch wenn Felder aus dem zu bearbeitenden Objekt selbst referenziert werden, ist der komplette Feldname - einschließlich Objektnamen - anzugeben, sonst wird der angegebene Name als Nicht-TAA-COBOL-Variable behandelt.

  • Variablen, also hier COBOL-Variablen, die nicht Bestandteil eines TAA-Objekts sind, müssen alphanumerisch sein (PIC X(n)). Numerische Variable können nicht korrekt konvertiert werden und führen zu falschen Ergebnissen. Die alphanumerische Eingabe wird bei Ausführung des Vergleichs von der Infrastruktur in ein zu dem Vergleichsfeld passendes Format konvertiert. Um ein numerisches Feld im TAA-Objekt mit einer numerischen COBOL-Variablen zu vergleichen, könnte der Code z.B. so aussehen:
01 mynumcomp pic x(9).
01 mynumcomp-n pic s9(9) comp.

.....

.....
move 55555555 to mynumcomp-n
move mynumcomp-n to mynumcomp
exec taa copylist mysrc to mytgt
     where mysrc.000-zahl > mynumcomp
end-exec

Der Inhalt der COBOL-Variablen wird der Infrastruktur unmittelbar vor Ausführung des Vergleichs übergeben.

  • Nach der Ausführung der Anweisung ist die neue aktuelle Position (CURRENT) undefiniert. Vor der Weiterarbeit mit einem der betroffenen Objekte muss eine neue Positionierung im Objekt und damit auch eine Aktualisierung des Inhalts der Datenstruktur im COBOL-Programm erfolgen (z.B. über GET), damit Inhalt der Objektstruktur im COBOL-Programm wieder mit dem inzwischen aktuellen Satz in Objekt übereinstimmt.
  • Beim dem Versuch, einen DELETELIST oder COPYLIST auf ein leeres Objekt auszuführen, wird eine Fehlercondition gesetzt (nicht sinnvolle und vermutlich nicht beabsichtigte Operation, vergleichbar EXEC TAA DELETE auf einen nicht vorhandenen Listensatz).

Bitte achten Sie genau auf das Format der in den Bedingungen angegebenen Variablen. Felder in TAA-Objekten werden nur mit Punkt erkannt, nicht mit Bindestrich! Die Nutzung von „_“ statt „.“ führt zu unterschiedlichen Ergebnissen.

cobref:cob:deletelist · Zuletzt geändert: 08.04.2020 10:16

Copyright © 1992-2024 TeamWiSE Gesellschaft für Softwaretechnik mbH         Adressen |  Kontakt |  AGB |  Datenschutzerklärung |  Impressum