SET-Anweisung

Die SET-Anweisung weisen einer Variablen einen Wert zu.

SYNTAX

Einführung

TargetFieldReference kennzeichnet das Ziel der Zuweisung. Folgende Ziele sind möglich:
  • Eine deklarierte Skalarvariable
  • Eine deklarierte Zeilenvariable
  • Eine der vordefinierten Zeilenvariablen (z. B. InputRoot)
  • Ein Feld in einer beliebigen Zeilenvariablen (d. h. eine Unterbaumstruktur oder konzeptionelle Zeile)
  • Eine Liste von Feldern in einer beliebigen Zeilenvariablen (d. h. eine konzeptionelle Liste)
  • Eine deklarierte Referenzvariable, die auf eines der oben genannten Elemente verweist
Das Ziel kann keine beliebige Datenbankeinheit sein.

SourceExpression ist ein Ausdruck, der den zuzuweisenden Wert bereitstellt. Dabei kann es sich um einen beliebigen Ausdruck handeln, der einen Skalarwert, einen Zeilenwert oder einen Listenwert zurückgeben kann.

Zuweisung zu Skalarvariablen

Handelt es sich bei dem Ziel um eine deklarierte Skalarvariable, wird SourceExpression bewertet und der Variablen zugewiesen. Falls erforderlich, wird der Wert des Quellausdrucks in den Datentyp der Variablen konvertiert. Ist diese Konvertierung nicht möglich, tritt entweder ein Fehler bei der Implementierung oder eine Ausnahme während der Laufzeit auf.

Nullwerte werden wie jeder andere Wert behandelt. Wenn der Ausdruck also einen Nullwert hat, wird der Variable der Wert "Null" zugewiesen.

Für Skalarvariablen haben die Klauseln TYPE, NAME, NAMESPACE und VALUE keine Bedeutung und sind nicht zulässig.

Zuweisung zu Reihen, Listen und Feldern

Handelt es sich bei dem Ziel um eine deklarierte Zeilenvariable, eine der vordefinierten Zeilenvariablen, ein Feld in einer Zeilenvariablen, eine Liste von Feldern in einer Zeilenvariablen oder um eine deklarierte Referenzvariable, die auf eines dieser Elemente verweist, ist das letzte Ziel ein Feld. In diesen Fällen wird das Zielfeld angesteuert (wobei die Felder, falls erforderlich, erstellt werden).

Wenn Array-Indizes in der TargetFieldReference (Zielfeldverweis) verwendet werden, kann die Navigation zum Zielfeld nur Felder im direkten Pfad vom Stamm- zum Zielfeld erstellen. Die nachfolgende SET-Anweisung erfordert beispielsweise, dass mindestens eine Instanz von Structure bereits in der Nachricht vorhanden ist:

SET OutputRoot.XML.Message.Structure[2].Field = ...  
Der Wert des Zielfeldes wird entsprechend einer Reihe von Regeln auf folgender Grundlage festgelegt:
  1. Das Vorhandensein/Nicht-Vorhandensein der Klauseln TYPE, NAME, NAMESPACE oder VALUE
  2. Der vom Quellausdruck zurückgegebene Datentyp
  1. Ist keine der Klauseln TYPE, NAME, NAMESPACE oder VALUE vorhanden (was sehr häufig der Fall ist), richtet sich die Ausgabe danach, ob SourceExpression den Wert einer Skalaren, einer Zeile oder einer Liste ermittelt:
    • Wenn SourceExpression einen Skalarwert ermittelt, wird der Wert des Zielfeldes auf den Wert gesetzt, der von SourceExpression zurückgegeben wird. Ist das Ergebnis jedoch ein Nullwert, wird das Zielfeld verworfen. Beachten Sie, dass der neue Wert des Feldes nicht unbedingt denselben Datentyp hat wie sein vorheriger Wert.
    • Wenn SourceExpression einen Zeilenwert ermittelt:
      1. Das Zielfeld wird angegeben.
      2. Der Wert des Zielfeldes wird festgelegt.
      3. Die untergeordneten Felder des Zielfeldes werden durch neue ersetzt, die von der Struktur und dem Inhalt der Liste vorgegeben werden.
    • Wenn "SourceExpression" einen Listenwert ermittelt:
      1. Die Zielfelder in der Zielbaumstruktur werden angegeben.
      2. Gibt es zu wenig Zielfelder, werden weitere Felder erstellt; gibt es zu viele Felder, werden die überschüssigen Felder entfernt.
      3. Die Werte der Zielfelde werden festgelegt.
      4. Die untergeordneten Felder der Zielfelder werden durch neue ersetzt, die von der Struktur und dem Inhalt der Liste vorgegeben werden.

      Weitere Informationen zur Arbeit mit Elementen des Typs list finden Sie im Abschnitt Mit Elementen des Typs xsd:: list arbeiten

  2. Wenn eine TYPE-Klausel vorhanden ist, wird der Typ des Zielfeldes auf den Wert gesetzt, der von SourceExpression zurückgegeben wird. Eine Ausnahme wird ausgelöst, wenn der Rückgabewert kein Skalarwert ist, nicht den Typ INTEGER hat oder ein Nullwert ist.
  3. Wenn eine NAMESPACE-Klausel vorhanden ist, wird der Namespace des Zielfeldes auf den Wert gesetzt, der von SourceExpression zurückgegeben wird. Eine Ausnahme wird ausgelöst, wenn der Rückgabewert kein Skalarwert ist, nicht den Typ CHARACTER hat oder ein Nullwert ist.
  4. Wenn eine NAME-Klausel vorhanden ist, wird der Name des Zielfeldes auf den Wert gesetzt, der von SourceExpression zurückgegeben wird. Eine Ausnahme wird ausgelöst, wenn der Rückgabewert kein Skalarwert ist, nicht den Typ CHARACTER hat oder ein Nullwert ist.
  5. Wenn eine VALUE-Klausel vorhanden ist, wird der Wert des Zielfeldes auf den Wert gesetzt, der von SourceExpression zurückgegeben wird. Eine Ausnahme wird ausgelöst, wenn der Rückgabewert kein Skalarwert ist.

Anmerkungen

SET-Anweisungen sind besonders nützlich in Berechnungsknoten, die eine Nachricht ändern, entweder indem sie ein Feld ändern oder ein neues Feld zur Originalnachricht hinzufügen. SET-Anweisungen sind zudem nützlich in Filter- und Datenbankknoten, um deklarierte Variablen oder Felder in der Umgebungsbaumstruktur oder in den Baumstrukturen der lokalen Umgebung festzulegen. Folgende Anweisungen können Sie in einem Rechenknoten verwenden, der eine Nachricht modifiziert:
                         SET OutputRoot = InputRoot;
SET OutputRoot.XML.Order.Name = UPPER(InputRoot.XML.Order.Name);

In diesem Beispiel wird ein Feld in der Nachricht auf Großschreibung gesetzt. Die erste Anweisung erstellt eine Ausgabenachricht, die völlig identisch ist mit der Eingabenachricht. Die zweite Anweisung stellt den Wert des Feldes Auftragsname auf einen neuen Wert ein, wie von dem Ausdruck rechts angegeben.

Wenn das Feld Order.Name nicht in der Originaleingabenachricht existiert, existiert es auch nicht in der von der ersten Anweisung generierten Ausgabenachricht. Der Ausdruck rechts von der zweiten Anweisung gibt NULL zurück (da das im UPPER-Funktionsaufruf angegebene Feld nicht existiert). Wenn der NULL-Wert einem Feld zugewiesen wird, wird das Feld gelöscht, falls dieses bereits existiert, und somit hat die zweite Anweisung keine Wirkung.

Wenn Sie einem Feld einen Nullwert zuweisen möchten, ohne das Feld zu löschen, sollten Sie eine Anweisung wie die folgende verwenden:
 SET OutputRoot.XML.Order.Name VALUE = NULL;
Zugehörige Konzepte
Übersicht zu ESQL
Zugehörige Tasks
ESQL erstellen
Zugriff auf Elemente im Nachrichtenhauptteil
Zugehörige Verweise
Syntaxdiagramme: verfügbare Typen
ESQL-Anweisungen
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ak05140_