Anfang des Inhaltsbereichs

UPDATE-Anweisung (update_statement) 

Die UPDATE-Anweisung ( update_statement ) ändert Spaltenwerte in Tabellenzeilen.

Syntax

<update_statement> ::=
  UPDATE [OF] <table_name> [<reference_name>] SET <set_update_clause>,... [KEY <key_spec>,...] [WHERE <search_condition>]
| UPDATE [OF] <table_name> [<reference_name>] (<column_name>,...) VALUES (<extended_value_spec>,...) [KEY <key_spec>,...] [WHERE <search_condition>]
| UPDATE [OF] <table_name> [<reference_name>] SET <set_update_clause>,... WHERE CURRENT OF <result_table_name>
| UPDATE [OF] <table_name> [<reference_name>] (<column_name>,...) VALUES (<extended_value_spec>,...) WHERE CURRENT OF <result_table_name>

table_name, reference_name, set_update_clause, key_spec, search_condition, column_name, extended_value_spec, result_table_name

Erläuterung

Der Tabellenname muß eine existierende Basistabelle, View-Tabelle (siehe Tabelle) oder ein Synonym identifizieren.

Die Spalten, deren Werte geändert werden sollen, heißen Zielspalten. Nach Angabe des Tabellennamens und gegebenenfalls des Referenznamens werden eine oder mehrere Zielspalten und neue Werte für diese Spalten angegeben.

Datentyp der Zielspalte und Datentyp des einzufügenden Wertes

Welche Zeilen der angegebenen Tabelle geändert werden, wird durch eine der folgende Angaben festgelegt:

Auch Werte von Schlüsselspalten, die von einem Benutzer bei einer CREATE TABLE-Anweisung oder einer ALTER TABLE-Anweisung definiert wurden, können verändert werden. Die gegebenenfalls implizit angelegte Schlüsselspalte SYSKEY kann nicht verändert werden.

Wenn der Tabellenname eine Join-View-Tabelle (siehe CREATE VIEW-Anweisung) angibt, können Spalten existieren, die nur in Kombination mit anderen Spalten geändert werden können (Ermitteln der Spaltenkombination für eine Spalte einer Join-Viewtabelle) Um den Spaltenwert der entsprechenden Spalte zu ändern, muß für alle Spalten der Spaltenkombination ein Wert angegeben werden. Dies gilt für alle Zielspalten, für die eine der folgenden Bedingungen gilt:

CURRENT OF

Wenn CURRENT OF angegeben ist, muß der Tabellenname in der FROM-Klausel der QUERY-Anweisung, mit der die Ergebnistabelle ( result_table_name ) aufgebaut wurde, mit dem Tabellennamen in der UPDATE-Anweisung übereinstimmen.

Wenn CURRENT OF angegeben ist, und der Cursor auf einer Zeile der Ergebnistabelle steht, werden den Zielspalten der korrespondierenden Zeile die korrespondierenden Werte zugewiesen. Korrespondierend ist die Zeile aus der in der FROM-Klausel der QUERY-Anweisung angegebenen Tabelle, aus der die Zeile der Ergebnistabelle gebildet wurde. Voraussetzung dafür ist jedoch, daß die Ergebnistabelle mit FOR UPDATE spezifiziert wurde. Es kann keine Aussage darüber getroffen werden, ob die Änderung in der korrespondierenden Zeile beim nächsten Zugriff auf die gleiche Zeile der Ergebnistabelle sichtbar ist oder nicht.

Gründe für das Scheitern der UPDATE-Anweisung

Wenn für Basistabellen, in denen durch die UPDATE-Anweisung Zeilen geändert wurden, CONSTRAINT-Definitionen existieren, wird für jede geänderte Zeile geprüft, ob sie die CONSTRAINT-Definitionen erfüllt. Ist dies für mindestens eine geänderte Zeile nicht der Fall, scheitert die UPDATE-Anweisung.

Für jede Zeile, in der durch die UPDATE-Anweisung der Wert von Fremdschlüsselspalten geändert wurde, wird geprüft, ob der jeweils resultierende Fremdschlüssel als Schlüssel bzw. als Wert eines mit UNIQUE definierten Index (siehe CREATE INDEX-Anweisung) in der korrespondierenden referenzierten Tabelle ( referenced_table ) existiert. Ist dies für mindestens eine geänderte Zeile der Fall, scheitert die UPDATE-Anweisung.

Für jede Zeile, in der durch die UPDATE-Anweisung der Wert einer referenzierten Spalte ( referenced_column ) einer referentiellen CONSTRAINT-Definition geändert werden soll, wird geprüft, ob Zeilen in der korrespondierenden Fremdschlüsseltabelle existieren, die die noch unveränderten Spaltenwerte als Fremdschlüssel enthalten. Ist dies für mindestens eine Zeile der Fall, scheitert die UPDATE-Anweisung.

Wenn für Basistabellen, in denen durch die UPDATE-Anweisung Zeilen geändert werden, Trigger definiert wurden, die nach einer UPDATE -Anweisung auszuführen sind, so werden diese ausgeführt. Scheitert einer dieser Trigger, scheitert die UPDATE -Anweisung.

Weitere Informationen

Spalten mit dem Datentyp LONG kann durch die UPDATE-Anweisung nur über einen Parameter oder durch Angabe von NULL ein Wert zugewiesen werden. Deshalb ist die Zuweisung von Werten an LONG-Spalten nur mit einigen Datenbankwerkzeugen möglich.

Bei der UPDATE-Anweisung wird der dritte Eintrag von SQLERRD in der SQLCA mit der Anzahl der geänderten Zeilen belegt. Dabei gilt eine Zeile auch dann als geändert, wenn der alte Wert mit einem gleichen neuen Wert überschrieben wurde.

Treten beim Ändern von Zeilen Fehler auf, scheitert die UPDATE-Anweisung und hinterläßt eine unveränderte Tabelle.

Ende des Inhaltsbereichs