Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

UPDATE - Spaltenwerte ändern

UPDATE ändert Spaltenwerte von Sätzen in einer Tabelle.
Bei partitionierten Tabellen darf der Primärschlüsselwert nicht geändert werden.

Die in der UPDATE-Anweisung (und in Voreinstellungen) vorkommenden Spezial-Literale (siehe "Spezial-Literale") sowie die Zeitfunktionen CURRENT_DATE, CURRENT_TIME und CURRENT_TIMESTAMP werden einmal ausgewertet, und die berechneten Werte gelten für alle Änderungen.

Um einen Satz in der angegebenen Tabelle zu ändern, müssen Sie Eigentümer dieser Tabelle sein oder das UPDATE-Privileg für jede zu ändernde Spalte besitzen. Zusätzlich muss der Transaktionsmodus der aktuellen Transaktion READ WRITE sein.

Sind für die Tabelle bzw. die betroffenen Spalten Integritätsbedingungen definiert, werden diese nach dem Ändern geprüft. Ist eine Integritätsbedingung verletzt, werden die Änderungen rückgängig gemacht und ein entsprechender SQLSTATE gesetzt.



UPDATE tabelle [[AS] korrelationsname ]

   SET spaltenangabe  = spaltenwert [, spaltenangabe  = spaltenwert ]...

  [WHERE { suchbedingung | CURRENT OF cursor }]


spaltenangabe  ::= { spalte | spalte ( posnr ) | spalte ( min..max ) }

spaltenwert ::= { ausdruck | <{ wert | NULL},...> | DEFAULT | NULL }



tabelle

Name der Tabelle, in der Sätze geändert werden sollen. Die Tabelle kann eine Basistabelle oder ein änderbarer View sein.


korrelationsname

Tabellenname, der innerhalb dieser Anweisung eine Umbenennung für tabelle ist.

Bei jeder Spaltenangabe, die sich auf tabelle bezieht, müssen Sie den Spaltennamen mit dem neuen Namen korrelationsname qualifizieren, wenn der Spaltenname nicht eindeutig ist.

Der neue Name muss eindeutig sein, d.h. korrelationsname darf nur einmal in einer Tabellenangabe dieser Anweisung vorkommen.

Sie müssen eine Tabelle umbenennen, wenn die Spalten der Tabelle ohne Umbenennung nicht eindeutig angegeben werden können.

Außerdem können Sie eine Tabelle umbenennen, um durch entsprechende Namen einen Ausdruck verständlicher zu formulieren oder um lange Namen abzukürzen.


spalte

Name einer einfachen Spalte, deren Inhalt geändert werden soll. Die Spalte muss in der Tabelle enthalten sein. Eine Spalte darf nur einmal innerhalb einer UPDATE-Anweisung vorkommen.


spalte(posnr)

Element einer multiplen Spalte, dessen Wert geändert werden soll.

Die multiple Spalte muss in der Tabelle enthalten sein. Werden mehrere Elemente einer multiplen Spalte angegeben, muss der Teilbereich aus den angegebenen Spaltenelementen lückenlos sein. Jedes Element darf genau einmal vorkommen.

Für posnr geben Sie eine vorzeichenlose Ganzzahl >= 1 an.


spalte(min..max)

Teilbereich von Spaltenelementen einer multiplen Spalte, die mit Werten belegt werden sollen. Die multiple Spalte muss in der Tabelle enthalten sein. Werden mehrere Elemente einer multiplen Spalte angegeben, muss der Teilbereich aus den angegebenen Spaltenelementen lückenlos sein.
Jedes Element darf genau einmal vorkommen.

Für min und max geben Sie vorzeichenlose Ganzzahlen >= 1 an; max muss >= min sein.


ausdruck

Ausdruck, dessen Wert der vorangehenden einfachen Spalte zugeordnet wird. Der Wert des Ausdrucks muss mit dem Datentyp der Spalte verträglich sein (siehe Abschnitt „Werte in Tabellenspalten eintragen").

Ist ausdruck eine Benutzervariable, kann auch ein Vektor angegeben werden. Die Spalte muss dann eine multiple Spalte sein und die Anzahl der Elemente des Vektors muss mit der Anzahl der Spaltenelemente übereinstimmen.

Für ausdruck gelten folgende Einschränkungen:

    • Weder die tabelle zu Grunde liegende Basistabelle noch ein View auf diese Basistabelle dürfen in der FROM-Klausel einer Unterabfrage stehen, die in ausdruck vorkommt.

    • Mengenfunktionen (AVG, MAX, MIN, SUM, COUNT) sind nicht erlaubt.


<{ wert , NULL},...>

Aggregat, das einer multiplen Spalte zugewiesen werden soll.

Die Anzahl der Ausprägungen muss mit der Anzahl der Spaltenelemente übereinstimmen. Der Datentyp von wert muss mit dem Datentyp der Zielspalte verträglich sein (siehee Abschnitt „Werte in Tabellenspalten eintragen").


DEFAULT

Nur für einfache Spalte.

Die zugehörige Spalte wird mit dem voreingestellten Wert belegt, wenn eine Voreinstellung für die Spalte definiert ist. Sonst wird sie mit dem NULL-Wert belegt.


NULL

Der vorangehenden Spalte wird der NULL-Wert zugewiesen.


WHERE-Klausel

Die WHERE-Klausel gibt an, welche Sätze geändert werden.

WHERE-Klausel nicht angegeben:
Alle Sätze der Tabelle werden geändert.


suchbedingung

Bedingung, die die zu ändernden Sätze erfüllen müssen. Ein Satz wird nur geändert, wenn er die angegebene Suchbedingung erfüllt.

Für suchbedingung gelten folgende Einschränkungen:

    • Spaltenangaben in suchbedingung außerhalb von Unterabfragen dürfen sich nur auf die angegebene Tabelle beziehen.

    • Weder die tabelle zu Grunde liegende Basistabelle noch ein View auf diese Basistabelle dürfen in der FROM-Klausel einer Unterabfrage stehen, die in suchbedingung vorkommt.

Wenn kein Satz die Suchbedingung erfüllt, wird kein Satz verändert und ein SQLSTATE gesetzt, der mit WHENEVER NOT FOUND behandelt werden kann.


CURRENT OF cursor

Name des Cursors, über den der zu ändernde Satz bestimmt wird. tabelle muss die in der ersten FROM-Klausel der Cursorbeschreibung angegebene Tabelle sein.

Für den Cursor gelten folgende Bedingungen:

      • Der Cursor muss sich auf die Tabelle tabelle beziehen.

      • Der Cursor muss änderbar sein.

      • Der Cursor muss zum Ausführungszeitpunkt der UPDATE-Anweisung geöffnet und mit FETCH auf einen Satz der Tabelle positioniert sein. Zusätzlich muss die FETCH-Anweisung in derselben Transaktion erfolgt sein wie die UPDATE-Anweisung..

UPDATE ändert den Satz, auf den der Cursor cursor zeigt.

UPDATE ist nicht erlaubt, wenn für den Cursor cursor der Schubmodus eingeschaltet ist (siehe Abschnitt „Pragma PREFETCH").

Wurde der Cursor cursor mit der FOR UPDATE-Klausel und Spaltenangaben vereinbart, können nur die dort angegebenen Spalten geändert werden.

Die UPDATE-Anweisung beeinflusst die Position des Cursors nicht. Soll der nächste Satz der Ergebnistabelle geändert werden, müssen Sie den Cursor mit FETCH auf diesen Satz positionieren.

Werte einer multiplen Spalte ändern

Bei einer multiplen Spalte können Werte für einzelne Spaltenelemente sowie für Teilbereiche geändert werden.

Ein Element einer multiplen Spalte wird durch seine Positionsnummer in der multiplen Spalte angesprochen.

Ein Teilbereich einer multiplen Spalte wird durch die Positionsnummern des ersten und letzten Elements des Teilbereichs angesprochen.

ACHTUNG! Die Position eines Elements innerhalb der multiplen Spalte kann sich ändern. Wenn ein Element mit einer niedrigeren Position auf den NULL-Wert gesetzt wird, werden alle nachfolgenden Elemente nach links verschoben und der NULL-Wert hinten angehängt.

UPDATE und Integritätsbedingungen

Durch Angabe von Integritätsbedingungen bei der Definition der Basistabelle können Sie den möglichen Inhalt von tabelle einschränken. Nach allen Änderungen durch die UPDATE-Anweisung muss der Inhalt von tabelle den definierten Integritätsbedingungen genügen.

UPDATE und änderbarer View

Ist bei der Definition eines änderbaren View CHECK OPTION angegeben, können nur Sätze in den View eingefügt werden, die den Abfrage-Ausdruck der View-Definition erfüllen.

UPDATE und Transaktionssicherung

UPDATE leitet außerhalb von Routinen eine Transaktion ein, wenn keine Transaktion offen ist. Durch die Definition eines Isolationslevels bei konkurrierenden Transaktionen können Sie steuern, welche Auswirkungen die UPDATE-Anweisung auf konkurrierende Transaktionen hat (siehe Abschnitt „SET TRANSACTION - Transaktionseigenschaften festlegen" ).
Tritt während der UPDATE-Anweisung ein Fehler auf, so werden sämtliche bereits durchgeführten Änderungen rückgängig gemacht.


Beispiele

Mindestbestand aller Artikel auf 20 erhöhen.

UPDATE artikel 
SET    minbestand = 20
WHERE  minbestand < 20


Änderung des Mindestbestands unter Verwendung eines Cursors:

DECLARE cur_artikel CURSOR FOR
   SELECT minbestand FROM artikel WHERE minbestand < 20
   FOR UPDATE

OPEN cur_artikel


Mit einer Folge von FETCH- und UPDATE-Anweisungen können die betroffenen Sätze geändert werden.

FETCH cur_artikel INTO :MINBESTAND

UPDATE artikel SET minbestand = 20 WHERE CURRENT OF cur_artikel


Der Cursor CUR_MWST wählt alle Leistungen aus, für die keine Mehrwertsteuer berechnet wird. Mit einer Folge von FETCH- und UPDATE-Anweisungen können die betroffenen Sätzegeändert werden.

DECLARE cur_mwsatz CURSOR WITH HOLD FOR
   SELECT lnr, ltext, mwsatz
   FROM leistung WHERE mwsatz=0.00
   FOR UPDATE

OPEN cur_mwsatz 

FETCH NEXT cur_mwsatz 
      INTO :LNR, :LTEXT  INDICATOR :INDLTEXT, :MWSATZ INDICATOR :INDMWSATZ

UPDATE leistung SET mwsatz =0.15 WHERE CURRENT OF cur_mwst
...


In der Tabelle FARBTAB wird für die Farbe orange die Intensität der einzelnen Farbkomponentengeändert. Die Spalte RGB für die Farbintensität ist eine multiple Spalte:

UPDATE farbtab SET rgb(1..3) = <0.8, 0.4, 0> WHERE farbname = 'orange'

Siehe auch

DELETE, INSERT, MERGE