Löschen von Daten aus Tabellen

Sie können Daten aus einer Tabelle löschen, indem Sie eine oder mehrere Zeilen aus der Tabelle löschen, indem Sie alle Zeilen aus der Tabelle löschen oder indem Sie Spalten aus der Tabelle löschen.

Prozedur

So löschen Sie eine oder mehrere Zeilen in einer Tabelle:

  • Verwenden Sie die Anweisung "DELETE" mit einer WHERE-Klausel, um eine Suchbedingung anzugeben.

    Die DELETE-Anweisung entfernt null oder mehr Zeilen einer Tabelle, je nachdem, wie viele Zeilen die Suchbedingung erfüllen, die Sie in der WHERE-Klausel angeben.

    Sie können DELETE mit einer WHERE-Klausel verwenden, um nur ausgewählte Zeilen aus einer deklarierten temporären Tabelle zu entfernen, jedoch nicht aus einer erstellten temporären Tabelle.

    Die folgende DELETE-Anweisung löscht jede Zeile in der Tabelle YEMP, die die Mitarbeiternummer "000060" enthält.

    DELETE FROM YEMP
      WHERE EMPNO = '000060';

    Wenn diese Anweisung ausgeführt wird, löscht Db2 jede Zeile aus der YEMP-Tabelle, die die Suchbedingung erfüllt.

    Wenn Db2 bei der Ausführung Ihrer DELETE-Anweisung einen Fehler feststellt, wird das Löschen der Daten gestoppt und es werden Fehlercodes in den Variablen SQLCODE und SQLSTATE oder in zugehörigen Feldern in SQLCA zurückgegeben. Die Daten in der Tabelle ändern sich nicht.

    Wenn das Löschen erfolgreich war, enthält SQLERRD(3) in der SQLCA die Anzahl der gelöschten Zeilen. Diese Zahl enthält nur die Anzahl der gelöschten Zeilen in der Tabelle, die in der DELETE-Anweisung angegeben ist. Zeilen, die (in anderen Tabellen) gemäß der CASCADE-Regel gelöscht werden, sind nicht in SQLERRD(3) enthalten.

So löschen Sie alle Zeilen in einer Tabelle:

  • Verwenden Sie die DELETE-Anweisung ohne Angabe einer WHERE-Klausel.

    Bei segmentierten Tabellenbereichen ist das Löschen aller Zeilen einer Tabelle sehr schnell.

    Die folgende DELETE-Anweisung löscht jede Zeile in der Tabelle YDEPT:

    DELETE FROM YDEPT;

    Wenn die Anweisung ausgeführt wird, bleibt die Tabelle bestehen (d. h., Sie können Zeilen in sie einfügen), aber sie ist leer. Alle vorhandenen Ansichten und Berechtigungen in der Tabelle bleiben bei Verwendung von "LÖSCHEN" erhalten.

  • Verwenden Sie die TRUNCATE-Anweisung.

    Die TRUNCATE-Anweisung kann gegenüber einer DELETE-Anweisung folgende Vorteile bieten:

    • Die TRUNCATE-Anweisung kann Lösch-Trigger ignorieren
    • Die TRUNCATE-Anweisung kann einen sofortigen Commit durchführen
    • Die TRUNCATE-Anweisung kann den für die Tabelle zugewiesenen Speicherplatz beibehalten

    Die TRUNCATE-Anweisung setzt jedoch nicht die Zählung für einen automatisch generierten Wert für eine Identitätsspalte in der Tabelle zurück. Wenn 14872 der nächste zu generierende Wert der Identitätsspalte vor einer TRUNCATE-Anweisung wäre, wäre 14872 der nächste nach der TRUNCATE-Anweisung generierte Wert.

    Angenommen, Sie müssen die Daten aus einer alten Bestandstabelle löschen, unabhängig von vorhandenen Löschauslösern, und Sie müssen den für die Tabelle zugewiesenen Speicherplatz für andere Zwecke verfügbar machen. Verwenden Sie die folgende TRUNCATE-Anweisung.

    TRUNCATE INVENTORY_TABLE
       IGNORE DELETE TRIGGERS
       DROP STORAGE;
    Angenommen, Sie müssen die Daten aus einer alten Bestandstabelle dauerhaft löschen, unabhängig von vorhandenen Löschauslösern, und Sie müssen den für die Tabelle zugewiesenen Speicherplatz beibehalten. Die geleerten Daten müssen vollständig nicht verfügbar sein, damit eine ROLLBACK-Anweisung die Daten nicht zurückgeben kann. Verwenden Sie die folgende TRUNCATE-Anweisung.
    TRUNCATE INVENTORY_TABLE
       REUSE STORAGE
       IGNORE DELETE TRIGGERS
       IMMEDIATE;
  • Verwenden Sie die DROP TABLE-Anweisung.

    DROP TABLE löscht die angegebene Tabelle und alle zugehörigen Ansichten und Berechtigungen, wodurch Pläne und Pakete ungültig werden können.

So entfernen Sie Spalten aus einer Tabelle:

  • Verwenden Sie die ALTER TABLE-Anweisung mit der DROP COLUMN-Klausel.

    Da das Löschen einer Spalte aus einer Tabelle eine ausstehende Änderung der Tabellendefinition darstellt, wird der Tabellenbereich in den Status "REORG ausstehend" (AREOR) versetzt. Wenn die ausstehende Änderung angewendet wird (durch Ausführen des REORG-Dienstprogramms mit den Optionen SHRLEVEL CHANGE oder REFERENCE), wird die Spalte aus der Tabelle entfernt und alle abhängigen Pakete und Anweisungen im dynamischen Anweisungscache werden ungültig.