UPDATE (SQL)

#### Search Results

Search

# UPDATE (SQL)

This Dokument behandelt folgende Themen:

- Funktion

- Syntax 1 - Searched UPDATE

- Syntax 2 - Positioned UPDATE

- Beispiele

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-name] `SET *` |  |  |  |  |  |
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` | Correlation-Name: 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

- Beispiel 2 - Searched UPDATE mit assignment-list

- Beispiel 3 - Positioned UPDATE

- Beispiel 4 - Positioned UPDATE mit assignment-list

### 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
    ...

### On this page

- Funktion
- Syntax 1 - Searched UPDATE
- Syntax 2 - Positioned UPDATE
- Beispiele