UPDATE-Anweisung

Die UPDATE-Anweisung ändert die Werte von angegebenen Spalten, in ausgewählten Zeilen, in einer externen Datenbanktabelle.

SYNTAX

Alle Zeilen, für die der WHERE-Klauselausdruck den Wert TRUE ermittelt, werden in der von Tabellenverweis angegebenen Tabelle aktualisiert. Nacheinander wird jede Zeile untersucht, und eine Variable wird so eingerichtet, dass sie auf die aktuelle Zeile verweist. Für gewöhnlich greift der WHERE-Klauselausdruck mit dieser Variablen auf Spaltenwerte zu, wodurch Zeilen entsprechend ihres Inhalts entweder aktualisiert oder unverändert beibehalten werden. Der Auf die Variable wird entweder durch den Korrelationsname (Korrelationsname) verwiesen bzw. bei Nichtvorhandensein einer AS-Klausel durch den Tabellennname (Tabellenname).Wenn eine Zeile zur Aktualisierung ausgewählt wurde, erhält jede in der SET-Klausel genannte Spalte einen neuen Wert, der vom jeweiligen entsprechenden Ausdruck vorgegeben wird. Diese Ausdrücke können bei Bedarf auf die aktuelle Zeilenvariable verweisen.

Tabellenverweis

Ein Tabellenverweis ist ein Sonderfall der Feldverweise, mit dem auf Nachrichtenbaumstrukturen verwiesen wird. Er beginnt immer mit dem Wort "Database" (Datenbank) und kann wahlweise Folgendes 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.

Die WHERE-Klausel

Der WHERE-Klauselausdruck kann alle Operatoren und Funktionen des Brokers in beliebiger Kombination verwenden. Er kann auf Tabellenspalten, Nachrichtenfelder und auf jede andere deklarierte Variable oder Konstante verweisen.

Beachten Sie jedoch, dass der Broker den WHERE-Klauselausdruck untersucht und entscheidet, ob der gesamte Ausdruck von der Datenbank bewertet werden kann. Wenn dies der Fall ist, wird er an die Datenbank übergeben. Damit ein Ausdruck von der Datenbank ausgewertet wird, darf er nur die von der Datenbank unterstützten Funktionen und Operatoren enthalten.

Die WHERE-Klausel kann jedoch auf Nachrichtenfelder, auf von enthaltenen SELECT-Funktionen deklarierte Korrelationsnamen sowie auf jede andere deklarierte Variable oder Konstante verweisen, die im Gültigkeitsbereich liegt.

Kann die Datenbank den gesamten Ausdruck nicht bewerten, sucht der Broker auf höchster Ebene nach AND-Operatoren und untersucht jeden Unterausdruck einzeln. Anschließend versucht er, die auswertbaren Unterausdrücke an die Datenbank zu übergeben. Alle übrigen werden vom Broker ausgewertet.Diese Vorgehensweise ist aus zwei Gründen zu beachten:
  1. Scheinbar harmlose Änderungen von Ausdrücken in einer WHERE-Klausel können die Leistung erheblich beeinflussen. Sie können ermitteln, ein wie großer Teil des Ausdrucks an die Datenbank übergeben wurde, indem Sie einen Benutzertrace auswerten.
  2. Das Verhalten einiger Datenbankfunktionen weicht leicht vom Verhalten des Brokers ab.

Fehler behandeln

Bei den Aktualisierungen können Fehler auftreten, beispielsweise könnte die Datenbank nicht betriebsbereit sein oder für die Tabelle sind Einschränkungen definiert, die die neuen Werte verletzen könnten. In diesen Fällen wird eine Ausnahme ausgelöst (ausgenommen, die Knoteneigenschaft Ausnahme für Datenbankfehler ausgeben wurde auf FALSE gesetzt). Diese Ausnahmen richten die entsprechenden Wert für den SQL-Code, den Status, den systemeigenen Fehler und den Fehlertext ein und können von Fehlerbehandlungsprogrammen bearbeitet werden (siehe Anweisung DECLARE HANDLER).

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

Beispiele

Im folgenden Beispiel wird davon ausgegangen, dass die Eigenschaft dataSource (Datenquelle) des Datenbankknotens konfiguriert wurde und dass die von ihr angegebene Datenbank STOCKPRICES heißt und die Spalten COMPANY und PRICES enthält. Sie aktualisiert die PRICE-Spalte der Zeilen in der Tabelle STOCKPRICES, deren COMPANY-Spalte dem Wert entspricht, der im Nachrichtenfeld "Company" angegeben wird.
UPDATE Database.StockPrices AS SP
 SET PRICE = InputBody.Message.StockPrice
 WHERE SP.COMPANY = InputBody.Message.Company
Im folgenden Beispiel (das von ähnlichen Annahmen ausgeht), verweist der Ausdruck der SET-Klausel auf den bestehenden Wert einer Spalte und verringert somit den Wert um die in der Nachricht genannten Menge:
UPDATE Database.INVENTORY AS INV
 SET QUANTITY = INV.QUANTITY - InputBody.Message.QuantitySold
 WHERE INV.ITEMNUMBER = InputBody.Message.ItemNumber
Im nachfolgenden Beispiel werden mehrere Spalten aktualisiert:
UPDATE Database.table AS T
 SET column1 = T.column1+1,
     column2 = T.column2+2;

Beachten Sie, dass es sich bei den Spaltennamen (links neben dem "=") um Einzelkennungen handelt. Sie müssen nicht mit einem Tabellen- oder Korrelationsnamen qualifiziert werden. Im Gegensatz dazu müssen Verweise auf Datenbankspalten in den Ausdrücken (rechts neben dem "=") mit dem Korrelationsnamen qualifiziert werden.

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

-- Zeilen in der Tabelle aktualisieren
UPDATE Database.{Source}.{Schema}.{Table} AS R SET Value = 0;
Zugehörige Konzepte
Übersicht zu ESQL
Zugehörige Tasks
ESQL erstellen
Datenbankstatus erfassen
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
ak05160_