Daten in einer Tabelle mit der Anweisung UPDATE ändern

Mit der Anweisung UPDATE können Sie Daten in einer Tabelle oder Sicht aktualisieren.

Mit der Anweisung UPDATE können Sie den Wert einer oder mehrerer Spalten in jeder Zeile ändern, die der Suchbedingung der WHERE-Klausel entspricht. Das Ergebnis der Anweisung UPDATE ist mindestens ein geänderter Spaltenwert in null oder mehr Zeilen einer Tabelle (abhängig davon, wie viele Zeilen die in der Klausel WHERE angegebene Suchbedingung erfüllen). Die Anweisung UPDATE sieht wie folgt aus:

   UPDATE table-name
     SET column-1 = value-1,
         column-2 = value-2, ...
     WHERE search-condition ...

Angenommen, ein Mitarbeiter wird verlagert. Zum Aktualisieren von CORPDATA.EMPLOYEE für die Verschiebung wiederzugeben:

   UPDATE CORPDATA.EMPLOYEE
     SET JOB = :PGM-CODE,
         PHONENO = :PGM-PHONE
     WHERE EMPNO = :PGM-SERIAL;

Verwenden Sie die Klausel SET, um einen neuen Wert für jede Spalte anzugeben, die Sie aktualisieren möchten. Die SET-Klausel benennt die Spalten, die aktualisiert werden sollen, und stellt die Werte bereit, in die sie geändert werden sollen. Sie können die folgenden Typen von Werten angeben:

  • Ein Spaltenname. Den aktuellen Wert der Spalte durch den Inhalt einer anderen Spalte in derselben Zeile ersetzen.
  • Eine Konstante. Ersetzen Sie den aktuellen Wert der Spalte durch den in der SET-Klausel angegebenen Wert.
  • Ein Nullwert. Ersetzen Sie den aktuellen Wert der Spalte durch den Nullwert mit dem Schlüsselwort NULL. Die Spalte muss so definiert werden, dass sie einen Nullwert enthalten kann, als die Tabelle erstellt wurde. Andernfalls tritt ein Fehler auf.
  • Eine Hostvariable. Ersetzen Sie den aktuellen Wert der Spalte durch den Inhalt einer Hostvariablen.
  • Eine globale Variable. Aktuellen Wert der Spalte durch den Inhalt einer globalen Variablen ersetzen.
  • Ein Sonderregister. Ersetzen Sie den aktuellen Wert der Spalte durch einen Sonderregisterwert, z. B. USER.
  • Einen Ausdruck. Ersetzen Sie den aktuellen Wert der Spalte durch den Wert, der aus einem Ausdruck resultiert.
  • Ein skalarer Fullselect. Ersetzen Sie den aktuellen Wert der Spalte durch den Wert, den die Unterabfrage zurückgibt.
  • Das Schlüsselwort DEFAULT . Ersetzen Sie den aktuellen Wert der Spalte durch den Standardwert der Spalte. Für die Spalte muss ein Standardwert definiert sein oder der Nullwert ist zulässig. Andernfalls tritt ein Fehler auf.

Die folgende Anweisung UPDATE verwendet viele verschiedene Werte:

   UPDATE WORKTABLE
      SET COL1 = 'ASC',
          COL2 = NULL,
          COL3 = :FIELD3,
          COL4 = CURRENT TIME,
          COL5 = AMT - 6.00,
          COL6 = COL7
       WHERE EMPNO = :PGM-SERIAL;

Verwenden Sie die WHERE-Klausel, um die zu aktualisierenden Zeilen anzugeben:

  • Verwenden Sie zum Aktualisieren einer einzelnen Zeile eine WHERE-Klausel, die nur eine Zeile auswählt.
  • Um mehrere Zeilen zu aktualisieren, verwenden Sie eine WHERE-Klausel, die nur die Zeilen auswählt, die Sie aktualisieren möchten.

Sie können die Klausel WHERE weglassen. In diesem Fall aktualisiert SQL jede Zeile in der Tabelle oder Sicht mit den von Ihnen angegebenen Werten.

Wenn der Datenbankmanager während der Ausführung Ihrer Anweisung UPDATE einen Fehler findet, stoppt er die Aktualisierung und gibt einen negativen SQLCODE-Wert zurück. Wird COMMIT (*ALL), COMMIT (*CS), COMMIT (*CHG) oder COMMIT (*RR) angegeben, werden keine Zeilen in der Tabelle geändert (Zeilen, die bereits durch diese Anweisung geändert wurden, falls vorhanden, werden auf ihre vorherigen Werte zurückgesetzt). Wird COMMIT (*NONE) angegeben, werden bereits geänderte Zeilen nicht auf vorherige Werte zurückgesetzt.

Wenn der Datenbankmanager keine Zeilen finden kann, die die Suchbedingung erfüllen, wird ein SQLCODE von +100 zurückgegeben.

Hinweis: Die Anweisung UPDATE hat möglicherweise mehrere Zeilen aktualisiert. Die Anzahl der aktualisierten Zeilen spiegelt sich in SQLERRD (3) des SQLCA wider. Dieser Wert ist auch über das Diagnoseelement ROW_COUNT in der Anweisung GET DIAGNOSTICS verfügbar.

Die SET-Klausel einer Anweisung UPDATE kann auf viele Arten verwendet werden, um die tatsächlichen Werte zu bestimmen, die in jeder Zeile festgelegt werden sollen, die aktualisiert wird. Im folgenden Beispiel wird jede Spalte mit ihrem entsprechenden Wert aufgelistet:

UPDATE EMPLOYEE
  SET WORKDEPT = 'D11',
      PHONENO = '7213',
      JOB = 'DESIGNER'
  WHERE EMPNO = '000270';

Sie können diese Anweisung UPDATE auch schreiben, indem Sie alle Spalten und dann alle Werte angeben:

UPDATE EMPLOYEE
  SET (WORKDEPT, PHONENO, JOB)
      = ('D11', '7213', 'DESIGNER')
  WHERE EMPNO = '000270';