Die DECLARE-Anweisung definiert eine Variable, ihren Datentyp und - optional - ihren Anfangswert.
Hinweise:
Definieren Sie eine Konstant mit CONSTANT. Konstanten innerhalb von Schemata, Modulen, Routinen oder zusammengesetzten Anweisungen können (sowohl implizit als auch explizit) deklariert werden. Das Verhalten dieser Fälle wird in der folgenden Liste dargestellt:
Eine Konstante oder Variable, die innerhalb einer Routine deklariert wird, überschreibt alle gleichnamigen Parameter sowie alle gleichnamigen Konstanten und Variablen, die in einem übergeordneten Modul oder Schema deklariert sind.
Mit EXTERNAL zeigen Sie eine benutzerdefinierte Eigenschaft (UDP) an. Eine UDP ist eine benutzerdefinierte Konstante, deren Anfangswert (optional über die DECLARE-Anweisung festgelegt) zur Entwicklungszeit vom Nachrichtenflusseditor geändert (siehe Abschnitt Nachrichtenflusseditor) bzw. zur Implementierungszeit vom Brokerarchiveditor überschrieben werden kann (siehe Abschnitt Brokerarchiveditor). Der Wert einer UDP kann nicht über ESQL geändert werden.
Wenn eine UDP in der DECLARE-Anweisung einen Anfangswert erhält, wird dieser als Standardwert verwendet. Jeder Wert, der bei der Entwicklung im Nachrichtenflusseditor bzw. während der Implementierung im Brokerarchvieditor festgelegt wird (sogar Zeichenfolgen mit Null-Länge), überschreibt jedoch jeden in der DECLARE-Anweisung codierten Anfangswert.
DECLARE deployEnvironment EXTERNAL CHARACTER 'Dev';codiert haben, wurde eine UDP-Variable von deployEnvironment mit dem Anfangswert Dev definiert.
Fügen Sie die UDP mithilfe der UDP-Registerkarte im Nachrichtenflusseditor zum Nachrichtenfluss hinzu.
Wenn Sie den Nachrichtenfluss der Brokerarchivdatei hinzufügen, dient die UDP als Attribut des Nachrichtenflusses. Das Attribut muss genauso bezeichnet werden wie die ESQL-Variable in der DECLARE-Anweisung (in diesem Fall deployEnvironment). Nur so kann sichergestellt werden, dass der festgelegte Anfangswert unverändert bleibt.
Alle UDPs in einem Nachrichtenfluss müssen einen Wert haben, der entweder in der DECLARE-Anweisung oder durch den Nachrichtenfluss- bzw. Brokerarchiveditor vergeben wurde. Anderenfalls tritt bei Implementierungszeit ein Fehler auf. Nachdem die UDP deklariert wurde, kann ihr Wert zur Ausführungszeit von nachfolgenden ESQL-Anweisungen abgefragt werden.
Der Vorteil von UDPs liegt darin, dass ihre Werte während der Implementierung geändert werden können. Wenn Sie z. B. mit den UDPs Konfigurationsdaten halten, können Sie bei der Implementierung einen Nachrichtenfluss für einen bestimmten Computer, eine Task oder Umgebung konfigurieren, ohne den Code auf Knotenebene ändern zu müssen. Es ist auch möglich, die UDPs zur Ausführungszeit über die CMP-API (CMP =
Configuration Manager Proxy) zu ändern.
UDPs können nur in Modulen oder Schemas deklariert werden. die DECLARE-Anweisung kann also nur auf der MODULE- oder SCHEMA-Ebene mit dem Schlüsselwort EXTERNAL verwendet werden. Wenn Sie eine DECLARE-Anweisung innerhalb von PROCEDURE oder FUNCTION mit dem Schlüsselwort EXTERNAL verwenden, wird bei der Implementierung des Nachrichtenflusses eine Ausnahmebedingung BIP2402E ausgegeben.
Legen Sie den Datentyp einer UDP mit Bedacht fest, da mit dem Typ CAST der Wert des angeforderten Datentyps geändert wird.
Eine Übersicht über benutzerdefinierte Eigenschafen finden Sie unter Benutzerdefinierte Eigenschaften in ESQL.
DECLARE mycolor EXTERNAL CHARACTER 'blue';
DECLARE TODAYSCOLOR EXTERNAL CHARACTER; SET COLOR = TODAYSCOLOR;wobei es sich bei TODAYSCOLOR um eine benutzerdefinierte Eigenschaft vom Typ CHARACTER und mit einem vom Nachrichtenfluss-Editor festgelegten WERT ist.
Mit NAME definieren Sie einen Aliasnamen (d. h. einen alternativen Namen), unter dem eine Variable bekannt sein kann.
-- Die nachfolgende Anweisung gibt Schema1 den Aliasnamen 'Joe'. DECLARE Schema1 NAME 'Joe'; -- Die nachfolgende Anweisung erstellt ein Feld 'Joe'. SET OutputRoot.XMLNS.Data.Schema1 = 42; -- Die nachfolgende Anweisung fügt einen Wert in eine Tabelle namens Table1 -- im Schema 'Joe' ein. INSERT INTO Database.Schema1.Table1 (Answer) VALUES 42;
DECLARE Schema1 EXTERNAL NAME; CREATE FIRSTCHILD OF OutputRoot.XMLNS.TestCase.Schema1 Domain('XMLNS') NAME 'Node1' VALUE '1'; -- Wenn Schema1 den Wert 'red' erhalten hat, lautete das Ergebnis: <xml version="1.0"?> <TestCase> <red> <Node1>1</Node1> </red>
Mit NAMESPACE definieren Sie einen Aliasnamen (d. h. einen alternativen Namen), unter dem ein Namespace bekannt sein kann.
Dies ist ein Beispiel für eine Namespace-Deklaration, ihre Verwendung als BereichsId in einem Pfad und als Zeichenkonstante in einem Namespace-Ausdruck:
DECLARE prefixOne NAMESPACE 'http://www.example.com/PO1'; -- Auf der rechten Seite der Zuweisung wird eine Namespacekonstante -- als solche verwendet, während auf der linken Seite eine -- als normale Konstante verwendet wird (d. h. in einem Ausdruck). SET OutputRoot.XMLNS.{prefixOne}:{'PurchaseOrder'} = InputRoot.XMLNS.prefixOne:PurchaseOrder;
Mit SHARED definieren Sie eine gemeinsame Variable. Gemeinsame Variablen gehören dem Nachrichtenfluss (wenn sie in einem Schema deklariert sind) oder Knoten (wenn sie in einem Modul deklariert sind), werden aber von den Instanzen des Flusses (Threads) gemeinsam verwendet. Außerhalb der Nachrichtenflussebene ist kein Variablentyp sichtbar. So ist es beispielsweise nicht möglich, Variablen unter mehreren Ausführungsgruppen gemeinsam zu nutzen.
Mithilfe von gemeinsamen Variablen kann ein Speichercache im Nachrichtenfluss implementiert werden (siehe Abschnitt Reaktionszeiten von Nachrichtenflüssen optimieren). Gemeinsame Variablen haben eine lange Lebensdauer und sind für mehrere Nachrichten sichtbar, die einen Fluss durchlaufen (siehe Abschnitt Langlebige Variablen).
Sie können keine gemeinsame Variabel innerhalb einer Funktion oder Prozedur definieren.
Diese Lese-Schreib-Variablen sind ideal geeignet für Benutzer, die die Vorteile in Hinblick auf die Persistenz und Transaktionsorientiertheit von Datenbanken gerne gegen eine bessere Leistung eintauschen, da sie eine längere Lebensdauer als nur eine Nachricht und eine bessere Performance als eine Datenbank aufweisen.
Da gemeinsame Variablen von mehreren weiteren Instanzen aktualisiert werden können, ist darauf zu achten, keine Änderungen an den gemeinsamen Variablen vorzunehmen, die zu unerwarteten Ergebnissen führen könnten (z. B. wenn die Variable als Zähler verwendet wird).
Sie können verhindern, dass andere Instanzen die temporären Stufen der Daten sehen können, indem Sie eine BEGIN ATOMIC-Anweisung verwenden (siehe BEGIN ... END-Anweisung).
Unter Verwendung von gemeinsam genutzten Zeilenvariablen kann das Benutzerprogramm eine effiziente Lese- oder Schreibkopie der Nachricht eines Empfangsknotens erstellen, wodurch das Verfahren für die Handhabung großer Nachrichten vereinfacht wird.
Untergeordnete Baumstrukturen können nicht direkt aus einer gemeinsamen Zeilenvariablen in eine andere gemeinsamen Zeilenvariable kopiert werden. Untergeordnete Baumstrukturen lassen sich indirekt unter Verwendung einer Zeilenvariablen kopieren, die nicht gemeinsam genutzt wird. Skalare Werte, die aus einer gemeinsam genutzten Zeilenvariablen extrahiert wurden (mithilfe der FIELDVALUE-Funktion), können in eine andere gemeinsam genutzte Zeilenvariable kopiert werden.