UPDATE

#### Search Results

Search

# UPDATE

#### Structured Mode-Syntax

`UPDATE` [`RECORD`] [`IN`] [`STATEMENT`] [(r)]

#### Reporting Mode-Syntax

`UPDATE` | [`RECORD`] [`IN`] [`STATEMENT`] [(r)] |  |  |  |
|  | `SET` |  |  |  |
| `WITH` |  | `SAME` [`RECORD`] |
| `USING` | {operand1`=`operand2}

Dieses Dokument behandelt folgende Themen:

- Funktion UPDATE

- Einschränkungen bei UPDATE

- Datenbankspezifische Anmerkungen zu UPDATE

- Syntax-Beschreibung UPDATE

- Beispiel für UPDATE-Statement

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

Verwandte Statements: `ACCEPT/REJECT` | `AT BREAK` | `AT START OF DATA` | `AT END OF DATA` | `BACKOUT TRANSACTION` | `BEFORE BREAK PROCESSING` | `DELETE` | `END TRANSACTION` | `FIND` | `GET` | `GET SAME` | `GET TRANSACTION DATA` | `HISTOGRAM` | `LIMIT` | `PASSW` | `PERFORM BREAK PROCESSING` | `READ` | `READLOB` | `RETRY` | `STORE` | `UPDATELOB`

Gehört zur Funktionsgruppe: Datenbankzugriffe und Datenbankänderungen

## Funktion UPDATE

Das `UPDATE`-Statement dient dazu, die in der Datenbank gespeicherten Werte eines oder mehrerer Felder eines Datensatzes zu verändern. Der betreffende Datensatz muss vorher mit einem `FIND`-, `GET`- oder `READ`-Statement (oder bei Adabas auch mit einem `STORE`-Statement) ausgewählt werden.

### Hold-Status

Das `UPDATE`-Statement bewirkt, dass jeder mit dem betreffenden `FIND`-Statement oder `READ`-Statement gelesene Datensatz in den "Hold"-Status gestellt wird.

Die Hold-Logik ist im Leitfaden zur Programmierung beschrieben.

## Einschränkungen bei UPDATE

- Das `UPDATE`-Statement darf nicht in derselben Quellcode-Zeile stehen wie das Statement, mit dem der zu aktualisierende Datensatz ausgewählt wird.

- Mit Entire System Server ist das `UPDATE`-Statement nicht verfügbar.

## Datenbankspezifische Anmerkungen zu UPDATE

VSAM | VSAM-Primärschlüssel können aufgrund von VSAM-Beschränkungen nicht aktualisiert werden.
SQL | Mit dem `UPDATE`-Statement können Sie eine Reihe einer Datenbanktabelle aktualisieren. Das `UPDATE`-Statement entspricht dem SQL-Statement `UPDATE WHERE CURRENT OF CURSOR` (Positioned `UPDATE`), d.h. nur die zuletzt gelesene Reihe kann aktualisiert werden. Auf Großrechnern werden nur Spalten (Felder) aktualisiert, die innerhalb des Programms geändert wurden, sowie Spalten, die außerhalb des Programms (z.B. als Eingabefelder in Maps) geändert worden sein könnten (aber nicht notwendigerweise auch geändert wurden). Auf allen anderen Plattformen werden alle Spalten aktualisiert. Bei den meisten SQL-Datenbanken kann eine mit `FIND SORTED BY` oder `READ LOGICAL` gelesene Reihe nicht aktualisiert werden.

## Syntax-Beschreibung UPDATE

Operanden-Definitionstabelle:

Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition
--- | --- | --- | --- | ---
operand1 |  | S | A |  |  | A |  | N | P | I | F | B | D | T | L |  |  |  | nein | nein
operand2 | C | S | A |  |  | A |  | N | P | I | F | B | D | T | L |  |  |  | ja | nein

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`(r)` | Statement-Referenzierung: Mit der Notation `(r)` können Sie das Statement referenzieren, mit dem der Datensatz, der aktualisiert werden soll, gelesen wurde. `r` kann als Statement-Label oder Quellcode-Zeilennummer angegeben werden. Falls keine Referenzierung erfolgt, bezieht sich das `UPDATE`-Statement auf die innerste aktive `READ`- bzw. `FIND`-Verarbeitungsschleife. Ist keine `READ`- oder `FIND`-Schleife aktiv, bezieht es sich auf das letzte vorhergehende `GET`-Statement (bzw. `STORE`-Statement). Anmerkung Das `UPDATE`-Statement muss innerhalb der `READ`- bzw. `FIND`-Schleife stehen, auf die es sich bezieht.
`USING SAME` | USING SAME-Klausel: Diese Klausel ist nicht erlaubt, wenn ein `DEFINE DATA`-Statement verwendet wird, da sich in diesem Fall das `UPDATE`-Statement immer auf den gesamten im `DEFINE DATA`-Statement definierten View bezieht. Das Layout des Satzpuffers oder des Formatpuffers kann mit dem `OBTAIN`-Statement deklariert werden. Mit `USING SAME` geben Sie im Reporting Mode an, dass dieselben Felder aktualisiert werden sollen, die mit dem Statement, welches vom `UPDATE`-Statement referenziert wird, gelesen wurden; dies bedeutet, dass zur Aktualisierung der Felder die Werte verwendet werden, die den Datenbankfeldern zuletzt zugeordnet waren. Ist kein neuer Wert zugeordnet worden, wird der alte verwendet. Wenn das zu aktualisierende Feld ein Array-Bereich eines multiplen Feldes oder einer Periodengruppe ist und Sie einen variablen Index für diesen Array-Bereich verwenden, wird der zuletzt gültige Array-Bereich aktualisiert. Wenn die Indexvariable modifiziert wird, nachdem der Datensatz gelesen wurde, aber bevor das `UPDATE USING SAME`- (Reporting Mode) bzw. `UPDATE`-Statement (Structured Mode) ausgeführt wird, bedeutet dies, dass ein anderer Array-Bereich aktualisiert wird als gelesen wurde.
`SET/WITH operand1=operand2` | SET/WITH-KLausel: Mit dieser Klausel können Sie im Reporting Mode die Felder angeben, die geändert werden sollen, sowie die neuen Werte für diese Felder. Diese Klausel ist nicht erlaubt, wenn ein `DEFINE DATA`-Statement verwendet wird, da sich in diesem Fall das `UPDATE`-Statement immer auf den gesamten im `DEFINE DATA`-Statement definierten View bezieht.

## Beispiel für UPDATE-Statement

    ** Example 'UPDEX1S': UPDATE (structured mode)
    **
    ** CAUTION: Executing this example will modify the database records!
    ************************************************************************
    DEFINE DATA LOCAL
    1 EMPLOY-VIEW VIEW OF EMPLOYEES
      2 NAME
      2 FIRST-NAME
      2 CITY
    *
    1 #NAME (A20)
    END-DEFINE
    *
    INPUT 'ENTER A NAME:' #NAME (AD=M)
    IF #NAME = ' '
      STOP
    END-IF
    *
    FIND EMPLOY-VIEW WITH NAME = #NAME
      IF NO RECORDS FOUND
        REINPUT WITH 'NO RECORDS FOUND'  MARK 1
      END-NOREC
      INPUT 'NAME:      ' NAME (AD=O) /
            'FIRST NAME:' FIRST-NAME (AD=M) /
            'CITY:      ' CITY (AD=M)
      UPDATE
      END TRANSACTION
    END-FIND
    *
    END

Ausgabe des Programms `SUBEX1S`:

    ENTER A NAME: BROWN

Nach Eingabe und Bestätigung des Namens:

    NAME: BROWN
    FIRST NAME: KENNETH
    CITY: DERBY

Äquivalentes Reporting-Mode-Beispiel: UPDEX1R.

### On this page

- Funktion UPDATE
- Einschränkungen bei UPDATE
- Datenbankspezifische Anmerkungen zu UPDATE
- Syntax-Beschreibung UPDATE
- Beispiel für UPDATE-Statement