UPDATE (SQL)

This Dokument behandelt folgende Themen:

Gehört zur Funktionsgruppe: Datenbankzugriffe und Datenbankänderungen

Siehe auch UPDATE - SQL im Teil Natural for DB2 in der Database Management System Interfaces-Dokumentation:

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.


Funktion

Das SQL-Statement UPDATE dient zum Aktualisieren von Zeilen in einer Tabelle ohne Benutzung eines Cursor ("Searched" UPDATE) oder Spalten in einer Zeile, auf die ein Cursor positioniert ist (("Positioned" UPDATE).

Es sind zwei unterschiedliche Strukturen möglich:

Syntax 1 - Searched UPDATE

Das Searched UPDATE-Statement ist ein eigenständiges Statement, das ohne Referenzierung zu einem SELECT-Statement verwendet werden kann. Mit einem einzigen Statement können Sie keine, eine, mehrere oder alle Zeilen einer Tabelle ändern. Welche Zeilen geändert werden, bestimmen Sie mit der Suchbedingung (siehe search-condition), die auf die Tabelle angewendet wird. Optional ist es möglich, einem Tabellen- oder View-Namen einen Korrelationsnamen (siehe correlation-name) zuzuweisen.

Anmerkung:
Die Anzahl der Zeilen, die mit einem Searched UPDATE-Statement tatsächlich geändert wurden, kann mit der Systemvariablen *ROWCOUNT (siehe Systemvariablen-Dokumentation) ermittelt werden.

UPDATE

view-name  [period-clause] [correlation-nameSET *

         
table-name  [period-clause] [correlation-name] [include-columns] SET assignment-list
 [WHERE search-condition]

WITH

RR
RS
CS

[SKIP LOCKED DATA] [QUERYNO integer]                

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax Symbols.

Syntax-Element-Beschreibung - Syntax 1:

Syntax-Element Beschreibung
view-name
View-Name:

view-name ist jeweils der Name eines im DEFINE DATA-Statement definierten Natural-Views. Weitere Informationen siehe view-name im Abschnitt Grundlegende Syntaxbestandteile.

period-clause
Period-Klausel:

Gibt an, dass für das Ziel der Aktualisierungsoperation eine Period-Klausel gilt. Weitere Informationen siehe Period-Klausel im Abschnitt Grundlegende Syntaxbestandteile.

correlation-name
Korrelationsname:

Das Element correlation-name ist ein Alias-Name für table-name.

Weitere Informationen siehe correlation-name im Abschnitt Grundlegende Syntaxbestandteile.

include-columns
Include Columns-Klausel:

Gibt einen Satz Spalten an, die zusammen mit den table-name-Spalten in der Ergebnistabelle des UPDATE-Statement einbezogen werden, wenn das UPDATE-Statement in einer FROM-Klausel eines SELECT-Statement verschachtelt ist.

Weitere Informationen siehe include-columns.

SET
SET-Klausel:

Wenn sich die Änderungen auf einen View beziehen, müssen Sie in der SET-Klausel einen Stern (*) angeben, weil alle Spalten des Views geändert werden müssen.

Wenn sich die Änderungen auf eine Tabelle beziehen, können Sie in der SET-Klausel entweder eine Zuordnungsliste (assignment-list) angeben oder den Namen des View, der die zu ändernden Spalten enthält.

assignment-list
Assignment List:
Siehe Assignment List weiter unten.
WHERE search-condition
WHERE-Klausel:

In der WHERE-Klausel geben Sie die Auswahlkriterien für die Zeilen an, die geändert werden sollen.

Wenn Sie keine WHERE-Klausel angeben, wird die gesamte Tabelle geändert.

WITH
WITH - Isolation Level-Klausel:

Diese Klausel ermöglicht die explizite Angabe der beim Auffinden der zu aktualisierenden Zeile zu verwendenden Isolationsstufe.

Weitere Informationen siehe WITH isolation-level in der Beschreibung des SELECT-Statement.

CS Cursorstabilität
RR Wiederholtes Lesen
RS Lesestabilität
SKIP LOCKED DATA
SKIP LOCKED DATA-Klausel:

Gibt an, dass Zeilen übersprungen werden, wenn wegen anderer Transaktionen unverträgliche Sperren auf der Zeile liegen.

QUERYNO integer
QUERYNO-Klausel:

Diese Klausel ermöglicht Ihnen die explizite Angabe der in EXPLAIN-Ausgaben und Ablaufverfolgungssätzen für dieses Statement zu benutzenden Nummer. Die Nummer wird als QUERYNO-Spalte in der PLAN_TABLE für die Zeilen benutzt, die Informationen zu diesem Statement enthalten.

Zuordnungsliste

column-name =

scalar-expression

,

DEFAULT
NULL

In einer Zuordnungsliste (assignment-list) können Sie einer oder mehreren Spalten Werte zuweisen. Ein Wert kann entweder ein Skalar-Ausdruck (scalar-expression), DEFAULT oder NULL sein. Weitere Informationen siehe Skalar-Ausdrücke.

Wenn Sie NULL zuweisen, bedeutet dies, dass das betreffende Feld keinen Wert enthalten soll (auch nicht den Wert "0" oder "leer").

Alternative:

(column-name,...) =(

scalar-expression

,

)
DEFAULT
NULL
row-fullselect

Syntax-Element-Beschreibung

Syntax-Element Beschreibung
column-name
Spaltenname:

Gibt den Namen einer Spalte der Ergebnistabelle des MERGE-Statements an, der nicht gleich dem Namen einer anderen einzubeziehenden Spalte oder einer Spalte in der Zieltabelle ist.

DEFAULT
DEFAULT-Option:

Gibt an, dass der Standardwert verwendet wird, je nachdem wie die entsprechende Spalte in der Tabelle definiert ist.

NULL
NULL-Option:

Gibt den Wert NULL als neuen Wert für die Spalte an.

Wenn der Wert NULL zugeordnet wurde, bedeutet dies, dass das adressierte Feld keinen Wert enthalten soll (auch nicht den Wert 0 oder "leer".

row-fullselect
Row Full Select-Option:

Gibt ein Full Select an, das eine einzelne Zeile zurückgibt. Die Spaltenwerte werden den entsprechenden Spaltennamen zugeordnet.

Syntax 2 - Positioned UPDATE

Das Positioned UPDATE-Statement bezieht sich auf einen Cursor innerhalb einer Datenbankschleife. Es muss daher dieselbe Tabelle bzw. denselben View referenzieren wie das entsprechende SELECT-Statement, sonst erfolgt eine Fehlermeldung. Ein Positioned UPDATE kann nur bei nicht-cursor-orientierter Selektion verwendet werden.

Common Set-Syntax:

UPDATE

view-name   SET *

[WHERE CURRENT OF CURSOR  (r)]
view-name   SET assignment-list

Extended Set-Syntax:

UPDATE

view-name   SET *

[WHERE CURRENT OF CURSOR  (r)

FOR ROW

[:]host-variable

OF ROWSET

view-name   SET assignment-list integer

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax Symbols.

Syntax-Element-Beschreibung - Syntax 2:

Syntax-Element Beschreibung
view-name
View-Name:

view-name ist jeweils der Name eines im DEFINE DATA-Statement definierten Natural-Views. Siehe view-name im Abschnitt Grundlegende Syntaxbestandteile.

SET *

SET assignment-list

SET-Klausel:

Wenn sich die Änderungen auf einen View beziehen, müssen Sie in der SET-Klausel einen Stern (*) angeben, weil alle Spalten des Views geändert werden müssen.

Wenn sich die Änderungen auf eine Tabelle beziehen, können Sie in der SET-Klausel entweder eine Zuordnungsliste (assignment-list) angeben oder den Namen eines Views, der die zu ändernden Spalten enthält.

WHERE CURRENT OF CURSOR (r)
Statement-Referenz:

Mit der Notation (r) kann das Statement referenziert werden, das zur Selektion der zu ändernden Zeile benutzt wurde. Wird kein Statement angegeben, bezieht sich das UPDATE-Statement auf die jeweils innerste Verarbeitungsschleife, in der ein Datenbankdatensatz ausgewählt wurde.

FOR ROW … OF ROWSET
FOR ROW … OF ROWSET-Klausel:

Diese Klausel gehört zum SQL Extended Set.

Die optionale FOR ROW … OF ROWSET-Klausel für Positioned SQL UPDATE-Statements gibt an, welche Zeile der aktuellen Zeilengruppe (Rowset) aktualisiert werden muss. Sie sollte nur angegeben werden, wenn das UPDATE-Statement sich auf ein SELECT-Statement bezieht, das die Rowset-Positionierung verwendet und das Spalten-Arrays in der INTO-Klausel hat.

Wenn diese Klausel weggelassen wird, werden alle Zeilen der aktuellen Zeilengruppe durch die Werte in der Zuordnungsliste (assignment-list) überschrieben.

Diese Klausel kann nicht angegeben werden, wenn view-name SET * angegeben wird.

Beispiele

Beispiel 1 - Searched UPDATE

DEFINE DATA LOCAL
1 PERS VIEW OF SQL-PERSONNEL
2 NAME
2 AGE
...
END-DEFINE
...
ASSIGN AGE = 45
ASSIGN NAME = 'SCHMIDT'
UPDATE PERS SET * WHERE NAME = 'SCHMIDT' 
...

Beispiel 2 - Searched UPDATE mit assignment-list

DEFINE DATA LOCAL
1 PERS VIEW OF SQL-PERSONNEL
2 NAME
2 AGE
...
END-DEFINE
...
UPDATE SQL-PERSONNEL SET AGE = AGE + 1 WHERE NAME = 'SCHMIDT' 
...

Beispiel 3 - Positioned UPDATE

DEFINE DATA LOCAL
1 PERS VIEW OF SQL-PERSONNEL
2 NAME
2 AGE
...
END-DEFINE
...
SELECT * INTO PERS FROM SQL_PERSONNEL WHERE NAME = 'SCHMIDT' 
COMPUTE AGE = AGE + 1
UPDATE PERS SET * WHERE CURRENT OF CURSOR
END-SELECT
...

Beispiel 4 - Positioned UPDATE mit assignment-list

DEFINE DATA LOCAL
1 PERS VIEW OF SQL-PERSONNEL
2 NAME
2 AGE
...
END-DEFINE
...
SELECT * INTO PERS FROM SQL-PERSONNEL WHERE NAME = 'SCHMIDT'
UPDATE SQL-PERSONNEL SET AGE = AGE + 1 WHERE CURRENT OF CURSOR 
END-SELECT
...