MOVE-Anweisung

Die MOVE-Anweisung ändert das Feld, auf das die Referenzvariable Ziel verweist.

SYNTAX

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

Wenn eine TO-Klausel eingefügt wird, bewirkt diese, dass der Zielverweis auf dieselbe Einheit verweist wie die Quelle. Hierbei kann es sich um ein Nachrichtenfeld oder eine deklarierte Variable handeln.

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 darf nicht 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 Standardnamespace
* Ja Name
Ja Nein Namespace
Ja Ja Name und Namespace

Die IDENTITY-Klausel nimmt ein einzelnes Pfadelement anstelle der Klauseln TYPE, NAMESPACE und NAME und befolgt sämtliche im Thema zu Feldverweisen erläuterten Regeln (siehe Übersicht über 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

Beginn der Änderung
MOVE cursor FIRSTCHILD TYPE XML.Name 'Field1';
Ende der Änderung

Beginn der ÄnderungIn diesem Beispiel wird der Cursor der Referenzvariablen auf das erste untergeordnete Feld des Feldes verschoben, auf das er gerade zeigt. Der Typ dieses Feldes lautet XML.Name, der Name Field1.Ende der Änderung

Beginn der ÄnderungEine Liste der verwendbaren Typen finden Sie im Abschnitt FIELDTYPE-Funktion.Ende der Änderung

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
FIELDTYPE-Funktion
Funktion LASTMOVE
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Feedback

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Letzte Aktualisierung : 2009-02-17 15:29:27

ak05090_