Dieses Dokument behandelt folgende Themen:
Das SQL-Statement UPDATE
dient dazu, Reihen in einer
Tabelle zu ändern, ohne einen Cursor zu verwenden ("Searched"
UPDATE
), oder Spalten in der Reihe zu ändern, auf die
der Cursor zeigt ("Positioned"
UPDATE
).
Es sind zwei unterschiedliche Strukturen möglich:
Searched UPDATE
ist ein eigenständiges Statement, das
unabhängig von einem SELECT
-Statement verwendet werden
kann. Mit einem einzigen Statement können Sie keine, eine, mehrere oder alle
Reihen einer Tabelle ändern. Welche Reihen geändert werden, bestimmen Sie mit
der Suchbedingung (search-condition), die auf die
Tabelle angewendet wird. Außerdem ist es möglich, einem Tabellen- oder
View-Namen einen correlation-name zuzuweisen.
Anmerkung:
Die Anzahl der Reihen, die mit einem Searched UPDATE
tatsächlich geändert wurden, kann mit der Systemvariablen
*ROWCOUNT
(siehe Systemvariablen-Dokumentation) ermittelt
werden.
UPDATE
|
view-name [correlation-name]
SET *
|
||||||||||||
table-name [correlation-name]
SET
assignment-list
|
|||||||||||||
[WHERE
search-condition]
|
WITH
|
RR RS CS |
[QUERY NO integer]
|
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Syntax-Elementbeschreibung − Syntax 1:
view-name |
View-Name:
view-name ist jeweils der Name eines im
|
---|---|
SET |
SET-Klausel:
Wenn sich die Änderungen auf einen View beziehen,
müssen Sie in der Wenn sich die Änderungen auf eine Tabelle beziehen, können Sie in
der |
assignment-list | Siehe Assignment List weiter unten. |
WHERE search-condition |
WHERE-Klausel:
In der Wenn Sie keine |
column-name = | scalar-expression
NULL
|
In einer assignment-list können Sie einer
oder mehreren Spalten Werte zuweisen. Ein Wert kann entweder eine
scalar-expression oder NULL
sein.
Weitere Informationen siehe Scalar
Expressions.
Wenn Sie NULL
zuweisen, bedeutet dies, dass das
betreffende Feld keinen Wert enthalten soll (auch nicht den Wert 0 oder
Leerzeichen).
Die folgenden Syntax-Elemente gehören zum SQL Extended Set:
correlation-name | Das Element correlation-name ist ein Alias-Name für table-name. Weitere Informationen siehe correlation-name (im Abschnitt Grundlegende Syntaxbestandteile). |
---|---|
WITH |
WITH Isolation Level-Klausel:
Diese Klausel ermöglicht die explizite Angabe des beim Suchen der zu ändernden Reihen benutzten Isolation Level. Diese Klausel gilt nur für DB2-Datenbanken. Bei anderen Datenbanken verursacht sie einen Laufzeitfehler. |
QUERYNO integer |
QUERYNO-Klausel:
Diese Klausel wird zurzeit nicht unterstützt und wird ignoriert. |
Ein Positioned UPDATE
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
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 |
Syntax-Elementbeschreibung − Syntax 2:
view-name |
View-Name:
Bezieht sich auf den Namen eines im |
---|---|
SET *
SET assignment-list |
SET-Klausel:
Wenn ein View zum Ändern spezifiziert wurde, muss ein Stern (*) in
der Wurde eine Tabelle zum Ändern spezifiziert, muss die
|
WHERE CURRENT OF CURSOR (r) |
Statement-Referenz:
Die Notation |
FOR ROW … OF ROWSET |
FOR ROW … OF ROWSET-Klausel:
Diese Klausel gehört zum SQL Extended Set. Die optionale Wenn diese Klausel weggelassen wird, werden alle Reihen des aktuellen Rowset durch die Werte in der assignment-list überschrieben. Diese Klausel kann nicht angegeben werden, wenn
view-name
|
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' ...
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' ...
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 ...
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 ...