DECLARE-Anweisung

Die DECLARE-Anweisung definiert eine Variable, ihren Datentyp und - optional - ihren Anfangswert.

Beginn der ÄnderungMit der DECLARE-Anweisung können die folgenden drei Arten von Variablen definiert werden:
  • Extern
  • Normal
  • Gemeinsam
Weitere Informationen hierzu finden Sie unter ESQL-Variablen.Ende der Änderung

SYNTAX

Hinweise:

  1. Das Schlüsselwort SHARED ist in einer Funktion oder Prozedur nicht gültig.
  2. Sie können SHARED nicht mit dem Datentyp REFERENCE TO angeben. Verwenden Sie den Datentyp ROW, um eine Nachrichtenbaumstruktur in einer gemeinsamen Variablen zu speichern.
  3. EXTERNE Variablen sind implizit konstant.
  4. Geben Sie bei der Programmierung einer EXTERNEN Variablen einen Anfangswert.
  5. Wenn Sie den Datentyp REFERENCE TO angeben, müssen Sie den Anfangswert (einer Variablen oder einer Baumstruktur) in UrsprünglicherWertAusdruck angeben.
  6. Bei Verwendung der Klauseln NAMESPACE und NAME sind die Werte implizit konstant und vom Typ CHARACTER.

CONSTANT

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.

Datentyp

Folgende Werte können Sie als Datentyp angeben:
  • BOOL
  • BOOLEAN
  • INT
  • INTEGER (Ganze Zahl)
  • FLOAT (Gleitkommazahl)
  • DEC
  • DECIMAL
  • DATE
  • TIME
  • TIMESTAMP
  • GMTTIME
  • GMTTIMESTAMP
  • INTERVAL. Dieser Wert gilt nicht für externe Variablen (Schlüsselwort EXTERNAL angegeben)
  • CHAR (Zeichen)
  • CHARACTER
  • BLOB
  • BIT
  • ROW. Dieser Wert gilt nicht für externe Variablen (Schlüsselwort EXTERNAL angegeben)
  • REF. Dies gilt nicht für externe oder gemeinsame Variablen (Schlüsselwort EXTERNAL oder SHARED angegeben)
  • REFERENCE TO. Dies gilt nicht für externe oder gemeinsame Variablen (Schlüsselwort EXTERNAL oder SHARED angegeben)

EXTERNAL

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.

Beginn der ÄnderungWenn Sie beispielsweise
       DECLARE deployEnvironment EXTERNAL CHARACTER 'Dev';
codiert haben, wurde eine UDP-Variable von deployEnvironment mit dem Anfangswert Dev definiert.Ende der Änderung

Beginn der ÄnderungFü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.Ende der Änderung

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. Beginn der ÄnderungEs ist auch möglich, die UDPs zur Ausführungszeit über die CMP-API (CMP = Configuration Manager Proxy) zu ändern.Ende der Änderung

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.

Folgende Arten von Brokerknoten können auf UDPs zugreifen:
  • Compute-Knoten
  • Database-Knoten
  • Filter-Knoten
  • Von diesen Knotentypen abgeleitete Knoten

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.

Beispiel 1

DECLARE mycolor EXTERNAL CHARACTER 'blue'; 

Beispiel 2

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.

NAME

Mit NAME definieren Sie einen Aliasnamen (d. h. einen alternativen Namen), unter dem eine Variable bekannt sein kann.

Beispiel 1

-- 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; 

Beispiel 2

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>

NAMESPACE

Mit NAMESPACE definieren Sie einen Aliasnamen (d. h. einen alternativen Namen), unter dem ein Namespace bekannt sein kann.

Beispiel

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;

SHARED

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).

Gemeinsame Variablen bleiben für die Lebensdauer der folgenden Elemente bestehen:
  • Ausführungsgruppenprozess
  • Nachrichtenfluss bzw. Knoten oder
  • SQL-Code des Knotens, der die Variable deklariert
(immer die kürzeste Lebensdauer). Sie werden initialisiert, wenn die erste Nachricht nach jeder Broker-Initialisierung den Fluss oder Knoten durchläuft.

Sie können keine gemeinsame Variabel innerhalb einer Funktion oder Prozedur definieren.

Die Vorteile gemeinsamer Variablen im Vergleich zu Datenbanken sind:
  • Der Schreibzugriff ist wesentlich schneller.
  • Der Lesezugriff auf kleine Datenstrukturen ist schneller.
  • Der Zugriff ist direkt; d. h. Sie benötigen keine Sonderfunktion (SELECT) für den Datenabruf oder Sonderanweisungen (INSERT, UPDATE oder DELETE), um Daten zu ändern. Sie können in Ausdrücken direkt auf die Daten verweisen.
Die Vorteile von Datenbanken im Vergleich zu gemeinsamen Variablen sind:
  • Die Daten sind persistent.
  • Die Daten werden transaktionsorientiert geändert.

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.

Beginn der ÄnderungDa 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).Ende der Änderung

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.

Einschränkung:

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.

Der folgende Mustercode zeigt die Vorgehensweise zur Verwendung sowohl gemeinsamer als auch externer Variablen: Sie können Beispiele nur anzeigen, wenn Sie das Information Center verwenden, das im Message Brokers Toolkit integriert ist.
Zugehörige Konzepte
Übersicht zu ESQL
Benutzerdefinierte Eigenschaften in ESQL
Langlebige Variablen
Zugehörige Tasks
ESQL erstellen
Dynamische Feldverweise erstellen
Nachrichtenfluss zur Implementierungszeit mit benutzerdefinierten Eigenschaften konfigurieren
Reaktionszeiten von Nachrichtenflüssen optimieren
Zugehörige Verweise
Syntaxdiagramme: Verfügbare Typen
ESQL-Anweisungen
ESQL-Variablen
ESQL-Datentypen in Nachrichtenflüssen
Nachrichtenflusseditor
FIELDVALUE-Funktion
Brokerarchiveditor
BEGIN ... END-Anweisung
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Feedback

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

ak04980_