MOVE-Anweisung

Die MOVE-Anweisung (Verschiebeanweisung) ändert das Feld, dem eine durch Zielpunkte gekennzeichnete Referenzvariable zugeordnet ist.

SYNTAX

Anmerkungen:
  1. Die REPEAT-Klausel kann nur mit den Qualifikationsmerkmalen PREVIOUSSIBLING und NEXTSIBLING verwendet werden.

Wird eine TO-Klausel hinzugefügt, so ändert sie den Zielverweis dahingehend, dass er auf dieselbe Einheit verweist wie die Quelle. Dies kann entweder ein Nachrichtenfeld oder eine deklarierte Variabel sein.

Wird eine PARENT-, PREVIOUSSIBLING-, NEXTSIBLING, FIRSTCHILD- oder LASTCHILD-Klausel hinzugefügt, so versucht die MOVE-Anweisung, die Zielverweisvariable in die angegebene Richtung hinsichtlich der aktuellen Position zu verschieben. Falls es in der angegebenen Richtung ein Feld gibt, gelingt die Verschiebung. Falls es kein derartiges Feld gibt, misslingt die Verschiebung, d. h., die Verweisvariable verweist weiterhin auf dasselbe Feld oder dieselbe Variable wie zuvor, und die LASTMOVE-Funktion schlägt fehl. Die LASTMOVE-Funktion kann dazu verwendet werden, den Erfolg oder den Fehler einer Verschiebung zu bestimmen.

Falls eine TYPE-Klausel, eine NAME-Klausel oder beide vorhanden sind, wird das Ziel wieder in die angegebene Richtung verschoben (PREVIOUSSIBLING oder NEXTSIBLING, FIRSTCHILD oder LASTCHILD), jedoch in ein Feld mit dem angegebenen Typen, Namen oder beidem. Dies ist besonders nützlich, wenn der Name oder der Typ (oder beides) des Zielfeldes bekannt ist, da dadurch die Anzahl der MOVE-Anweisungen, die benötigt werden, um zu einem Feld zu gelangen, verringert wird. Der Grund dafür ist, dass Felder, die nicht die Bedingungen erfüllen, übersprungen werden; dazu können auch unerwartete Felder von Nachrichtenbaumstrukturen zählen, z. B. solche, die Leerzeichen darstellen.

Falls die angegebene Verschiebung nicht ausgeführt werden kann (d. h. ein Feld mit dem angegeben Typ oder Namen existiert nicht), bleibt das Ziel unverändert, und die LASTMOVE-Funktion schlägt fehl. Die TYPE-Klausel, NAME-Klausel oder beide Klauseln können einen beliebigen Ausdruck enthalten, der einen Wert eines passenden Datentyps zurückgibt (INTEGER für Typ und CHARACTER für Name). Eine Ausnahmebedingung wird ausgegeben, wenn der zurückgegebene Wert NULL ist.

Zwei weitere Klauseln, NAMESPACE und IDENTITY, verbessern die Funktion der NAME-Klausel.

Die NAMESPACE-Klausel umfasst jeden Ausdruck, der einen Wert ungleich Null vom Typ 'Charakter' zurückgibt. Sie kann auch einen Stern (*) umfassen, der einen Namespace angibt. Dies darfnicht mit einem Ausdruck verwechselt werden, da ein Stern (*) keinen monadischen Operator in ESQL darstellt.

Die Bedeutung hängt davon ab, ob NAME- und NAMESPACE-Klauseln wie folgt vorhanden sind:
NAMESPACE NAME Element von ... lokalisiert
Nein Nein Typ, Index oder beides
Nein Ja Name im Standard-Namespace
* Ja Name
Ja Nein Namespace
Ja Ja Name und Namespace

Die IDENTITY-Klausel nimmt ein einzelnes Pfadelement an Stelle der Klauseln TYPE, NAMESPACE und NAME und befolgt sämtliche im Thema zu Feldverweisen erläuterten Regeln (siehe ESQL-Feldreferenzen).

Bei der Verwendung von MOVE mit PREVIOUSSIBLING oder NEXTSIBLING können REPEAT-, TYPE- und NAME-Schlüsselwörter angegeben werden, die das Ziel zum vorherigen oder nächsten Feld mit demselben Typ oder Namen wie das aktuelle Feld verschieben. Das REPEAT-Schlüsselwort ist besonders nützlich beim Verschieben zu einem gleichgeordneten Element, da keine Ausdrücke geschrieben werden müssen, um einen Typ oder Namen zu definieren.

Beispiel

MOVE cursor FIRSTCHILD TYPE 0x01000000 NAME 'Field1';

In diesem Beispiel wird der Cursor der Referenzvariable auf das erste untergeordnete Feld des Feldes, auf das der Cursor gerade zeigt, verschoben. Dieses hat den Typ 0x01000000 und den Namen Field1.

Die MOVE-Anweisung erstellt keine neuen Felder.

Eine gängige Verwendung der MOVE-Anweisung besteht darin, von einer Instanz einer sich wiederholenden Struktur zur nächsten zu gehen. Auf die Felder innerhalb der Struktur kann zugegriffen werden, indem eine relative Feldreferenz verwendet wird. Beispiel:
WHILE LASTMOVE(sourceCursor) DO
  SET targetCursor.ItemNumber  = sourceCursor.item;
  SET targetCursor.Description = sourceCursor.name;
  SET targetCursor.Price       = sourceCursor.prc;
  SET targetCursor.Tax         = sourceCursor.prc * 0.175;
  SET targetCursor.quantity    = 1;
  CREATE NEXTSIBLING OF targetCursor AS targetCursor REPEAT;
  MOVE sourceCursor NEXTSIBLING REPEAT TYPE NAME;
END WHILE;

Weitere Informationen zu Referenzvariablen und ein Beispiel zum Verschieben einer Referenzvariablen finden Sie unter Dynamische Feldverweise erstellen.

Zugehörige Konzepte
Übersicht zu ESQL
Zugehörige Tasks
ESQL erstellen
Dynamische Feldverweise erstellen
Zugehörige Verweise
Syntaxdiagramme: verfügbare Typen
ESQL-Anweisungen
Funktion LASTMOVE
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ak05090_