## UPDATE-Klausel (update_clause)

Die UPDATE-Klausel (update_clause) gibt an, dass eine Ergebnistabelle änderbar werden soll. Für alle Zeilen, die diese Ergebnistabelle bilden, werden Schreibsperren gesetzt.

### Syntax

<update_clause> ::= FOR UPDATE [OF <column_name>,...] [NOWAIT]

### Erläuterung

Die angegebenen Spaltennamen müssen Spalten in den der QUERY-Spezifikation zu Grunde liegenden Tabellen bezeichnen. Es ist nicht erforderlich, dass sie in einer selektierten Spalte auftreten.

Die QUERY-Anweisung, die die UPDATE-Klausel enthält, muss eine änderbare Ergebnistabelle erzeugen.

Die UPDATE-Klausel ist Voraussetzung für die Verwendung der Ergebnistabelle mittels CURRENT OF <result_table_name> in der UPDATE-Anweisung, in der DELETE-Anweisung und in der LOCK-Anweisung. Für andere Formen der oben genannten SQL-Anweisungen sowie im interaktiven Betrieb hat die UPDATE-Klausel keine Bedeutung.

Es sind alle Spalten der zugrundeliegenden Basistabellen änderbar, sofern der Benutzer die entsprechenden Privilegien besitzt, unabhängig davon, ob sie als Spaltenname angegeben wurden oder nicht.

Es wird aus Performancegründen geraten, nur dann Spaltennamen anzugeben, wenn der Cursor in einer UPDATE-Anweisung verwendet werden soll.

Seien für eine Spalte x folgende Bedingungen erfüllt:

● x ist im Primärschlüssel oder einem Index enthalten

● x ist in der Suchbedingung der QUERY-Anweisung enthalten

● x ist in einer SET UPDATE-Klausel der UPDATE-Anweisung in der Art x = <expression> enthalten, wobei der Ausdruck (expression) die Spalte x enthält

Sind alle Bedingungen erfüllt, sollten Sie unbedingt die Spalte x als Spaltenname in der UPDATE-Klausel angeben.

Trifft mindestens eine der Bedingungen nicht zu, sollte auf die Angabe des Spaltennamens verzichtet werden.

#### NOWAIT

Wenn NOWAIT nicht angegeben wird, wird im Falle einer Sperrkollision auf die Freigabe des gesperrten Datenobjekts gewartet (jedoch maximal so lange wie der spezielle Datenbankparameter REQUEST_TIMEOUT angibt).

Wenn NOWAIT angegeben wird, wird nicht auf die Freigabe eines von einem anderen Benutzer gesperrten Datenobjekts gewartet, sondern im Fall einer Kollision eine Rückmeldung ausgegeben. Liegt keine Kollision vor, wird die gewünschte Sperre gesetzt.

Siehe auch:

SELECT-Anweisung (select_statement)

Konzepte des Datenbanksystems, Einschränkungen für UPDATE-Anweisungen