WebSphere Message Broker Version 8.0.0.5 Betriebssysteme: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Sehen Sie sich die Informationen zur aktuellen Produktversion im IBM Integration Bus Version 9.0 an.

INSERT-Anweisung

Die INSERT-Anweisung fügt eine Zeile in eine Datenbanktabelle ein.

Syntax

Syntaxdiagramm lesenSyntaxdiagramm überspringen
>>-INSERT--INTO--Tabellenverweis--+-----------------------+----->
                                  |    .-,-----------.    |   
                                  |    V             |    |   
                                  '-(----Spaltenname-+--)-'   

              .-,--------.      
              V          |      
>--VALUES--(----Ausdruck-+--)----------------------------------><

WHERE

|--Tabellenverweis =  --Database-------------------------------->

>--+----------------------------------------------+------------->
   '-+------------------------+--.--Schemaklausel-'   
     '-.--Datenquellenklausel-'                       

>--.--Tabellenklausel-------------------------------------------|

|--DataSourceClause =  --+-Datenquellenname-----------+---------|
                         '-{--Datenquellenausdruck--}-'   

|--SchemaClause =  --+-Schemaname-----------+-------------------|
                     '-{--Schemaausdruck--}-'   

|--TableClause =  --+-Tabellenname-----------+------------------|
                    '-{--Tabellenausdruck--}-'   

Eine einzelne Zeile wird in die durch Tabellenverweisangegebene Tabelle eingefügt. Der Spaltenname gibt die Spalten in der Zieltabelle an, die Sonderwerte erhalten sollen. Diese Werte werden von den Ausdrücken in der VALUES-Klausel festgelegt (der erste Ausdruck nennt den Wert der ersten benannten Spalte usw.). Die Anzahl der Ausdrücke in der VALUES-Klausel muss mit der Anzahl der benannten Spalten übereinstimmen. Spalten in der Tabelle, die nicht in der Liste enthalten sind, erhalten ihre Standardwerte.

Tabellenverweis

Ein Tabellenverweis ist ein Sonderfall der Feldreferenzen, mit dem auf Nachrichtenbaumstrukturen verwiesen wird. Er beginnt immer mit dem Wort "Database" (Datenbank) und kann eines der folgenden Elemente enthalten:
  • Nur einen Tabellennamen
  • Einen Schemanamen und einen Tabellennamen
  • Einen Datenquellnamen (d. h. den Namen einer Datenbankinstanz), einen Schemanamen und einen Tabellennamen
In allen Fällen kann der Name direkt oder durch einen Ausdruck in Klammern ({...}) angegeben werden. Der direkt angegebene Name einer Datenquelle, eines Schemas oder einer Tabelle kann ersetzt werden. Das bedeutet, dass wenn der Name als bekannter Name deklariert wurde, nicht der Name selbst verwendet wird, sondern der Wert des deklarierten Namens (siehe DECLARE-Anweisung).

Wird kein Schemaname angegeben, wird das Standardschema des Benutzers der Broker-Datenbank verwendet.

Wenn Sie keinen Datenquellnamen angeben, wird die Datenbank verwendet, auf die das Datenquellattribut des Knotens verweist.

Fehler behandeln

Bei Einfügevorgängen können Fehler auftreten, beispielsweise könnte die Datenbank nicht betriebsbereit sein oder für die Tabelle sind Einschränkungen definiert, die die neue Zeile verletzen könnte. In diesen Fällen wird eine Ausnahme ausgelöst, es sei denn, Sie haben die Knoteneigenschaft Ausnahme für Datenbankfehler ausgeben gelöscht. Diese Ausnahmebedingungen legen entsprechende Werte für die folgenden Elemente fest und können von Fehlerbehandlungsprogrammen bearbeitet werden (Details hierzu bei der Anweisung DECLARE HANDLER):
  • SQL-Code
  • State
  • Systemeigener Fehler
  • Fehlertext

Weitere Informationen zur Behandlung von Datenbankfehlern finden Sie unter Datenbankstatus erfassen.

Beispiele

Im folgenden Beispiel wird davon ausgegangen, dass die Eigenschaft Datenquelle des Datenbank-Knotens konfiguriert wurde und dass die von ihr angegebene Datenbank TABLE1 heißt und die Spalten A, B und C enthält.

Gegeben ist eine Nachricht mit dem folgenden generischen XML-Hauptteil:
<A>
 <B>1</B>
 <C>2</C>
 <D>3</D>
</A>
Die folgende INSERT-Anweisung fügt eine neue Zeile mit den Werten 1, 2 und 3 für die Spalten A, B und C in die Tabelle ein:
INSERT INTO Database.TABLE1(A, B, C) VALUES (Body.A.B, Body.A.C, Body.A.D);
Das nächste Beispiel zeigt die Verwendung des Namens einer berechneten Datenquelle, eines Schemas und einer Tabelle:
-- Variablen deklarieren, die den Namen der Datenquelle, des Schemas und der Tabelle halten sollen und
-- ihre Standardwerte einrichten
DECLARE Source CHARACTER 'Produktion';
DECLARE Schema CHARACTER 'db2admin';
DECLARE Table  CHARACTER 'DynamischeTabelle1';

-- Hier steht der Code, der ihren tatsächlicher Wert berechnet

-- Daten in die Tabelle einfügen
INSERT INTO Database.{Source}.{Schema}.{Table} (Name, Value) values ('Joe', 12.34);

Bitstrom in Datenbank einfügen

Wenn die Datenbankspalte, in die Sie Daten einfügen möchten, auf einen binären Datentyp gesetzt wird (z. B. BLOB), muss die Eingabenachricht im Bitstromformat dargestellt werden. Verwenden Sie den folgenden ESQL-Code, wenn sich die Eingabenachricht in der BLOB-Domäne befindet:
DECLARE msgBitStream BLOB InputRoot.BLOB.BLOB;
INSERT INTO Database.TABLE1(MSGDATA) VALUES (msgBitStream);

Wenn die Eingabenachricht sich in einer XML-Domäne wie z. B. XMLNS befindet, muss alternativ hierzu die Nachrichtenbaumstruktur vor der Anweisung INSERT serialisiert werden. Um die Nachrichtenbaumstruktur zu serialisieren und den Inhalt in die Datenbank einzufügen, verwenden Sie den folgenden ESQL-Code:
DECLARE propRef REFERENCE TO InputRoot.Properties;
DECLARE msgBitStream BLOB ASBITSTREAM(InputRoot.XMLNS, propRef.Encoding, propRef.CodedCharSetId);
INSERT INTO Database.TABLE1(MSGDATA) VALUES (msgBitStream);
Falls die Eingabenachrichten, die von Ihrem Nachrichtenfluss empfangen werden, von unterschiedlichen Codepages stammen, gehen die Informationen CodedCharSetID und Encoding verloren, wenn Sie wie im vorherigen Beispiel vorgehen. Um die Informationen CodedCharSetID und Encoding zu erfassen, können Sie die Tabelle mit zwei numerischen Spalten erweitern, um die CodedCharSetID- und Encoding-Daten zu speichern. Modifizieren Sie zur Erweiterung der Tabelle den ESQL-Code des vorherigen Beispiels so, dass die CodedCharSetID- und Encoding-Daten in separate Datenbankspalten eingefügt werden:
DECLARE propRef REFERENCE TO InputRoot.Properties;
DECLARE inCCSID INT propRef.CodedCharSetId;
DECLARE inEncoding INT propRef.Encoding;
DECLARE msgBitStream BLOB ASBITSTREAM(InputRoot.XMLNS, inEncoding, inCCSID);
INSERT INTO Database.TABLE1(MSGDATA, MSGENCODING, MSGCCSID) VALUES (msgBitStream, inEncoding, inCCSID);

Wenn die gesamte Nachricht mit dem zugehörigen MQMD-Header gespeichert und später zur Wiederherstellung der gesamten Nachricht in einem anderen Nachrichtenfluss auf einer anderen Plattform mit einer unterschiedlichen Codepage und Codierung verwendet werden soll, kann die Datenbanktabelle als Erweiterung des vorigen Beispiels zum Speichern aller numerischen Felder des MQMD-Headers erweitert werden.

Beispiel: Von einem unter AIX ausgeführten Nachrichtenfluss wird ein Nachrichtenbitstrom in die Datenbanktabelle eingefügt. Ein anderer, unter Windows ausgeführter Nachrichtenfluss ruft diesen ab und versucht, die Nachricht mit dem gespeicherten MQMD-Header wiederherzustellen.

Die folgende Gruppe numerischer Felder befindet sich im MQMD-Header:
    BackoutCount (MQLONG)  
    CodedCharSetId (MQLONG)
    Encoding (MQLONG)      
    Expiry (MQLONG)        
    Feedback (MQLONG)      
    MsgFlags (MQLONG)      
    MsgSeqNumber (MQLONG)  
    MsgType (MQLONG)       
    Offset (MQLONG)        
    OriginalLength (MQLONG)
    Persistence (MQLONG)   
    Priority (MQLONG)      
    PutApplType (MQLONG)   
    Report (MQLONG)        
    Version (MQLONG) 
Im folgenden Beispiel werden CodedCharSetID, Encoding, Priority und MsgSeqNumber verwendet:
   DECLARE propRef REFERENCE TO InputRoot.Properties;
   DECLARE mqmdRef REFERENCE TO InputRoot.MQMD;
   DECLARE inCCSID INT propRef.CodedCharSetId;
   DECLARE inEncoding INT propRef.Encoding;

   DECLARE inPriority INT mqmdRef.Priority;
   DECLARE inMsgSeqNumber INT mqmdRef.MsgSeqNumber;

   DECLARE msgBitStream BLOB ASBITSTREAM(InputRoot, inEncoding, inCCSID);

   INSERT INTO Database.TABLE1(MSGDATA, MSGENCODING, MSGCCSID, MSGPRIORITY,MSGSEQNUMBER) 
   VALUES (msgBitStream, inEncoding, inCCSID, inPriority, inMsgSeqNumber);
Wenn Sie eine XML-Nachricht in eine Datenbankspalte einfügen möchten, die einen Datentyp CHAR oder VARCHAR aufweist, muss der ESQL-Code so modifiziert werden, dass die Eingabenachricht in den Datentyp CHAR vor der Anweisung INSERT konvertiert wird. Im folgenden Beispiel wird die serialisierte Nachricht mittels CAST in den Datentyp CHAR umgewandelt. Die CodedCharSetID- und Encoding-Daten werden in unterschiedliche Datenbankspalten eingefügt.
DECLARE propRef REFERENCE TO InputRoot.Properties;
DECLARE inCCSID INT propRef.CodedCharSetId;
DECLARE inEncoding INT propRef.Encoding;
DECLARE msgBitStream BLOB ASBITSTREAM(InputRoot.XMLNS, inEncoding, inCCSID);
DECLARE msgChar CHAR CAST(msgBitStream AS CHAR CCSID inCCSID);
INSERT INTO Database.TABLE1(MSGDATA, MSGENCODING, MSGCCSID) VALUES (msgChar, inEncoding, inCCSID);

Beispiele zum Extrahieren eines Nachrichtenbitstroms aus einer Datenbank, die auf den beiden vorherigen Beispielen basieren, finden Sie im Abschnitt Bitstromdaten aus einer Datenbank auswählen.

Bemerkungen | Marken | Downloads | Bibliothek | Support | Feedback

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Letzte Aktualisierung:
        
        Letzte Aktualisierung: 2015-02-28 16:21:30


ReferenzthemaReferenzthema | Version 8.0.0.5 | ak05050_