TRUNCATE (Anweisung)

Die Anweisung TRUNCATE löscht alle Zeilen aus einer Tabelle.

Aufruf

Diese Anweisung kann in ein Anwendungsprogramm eingebettet oder mithilfe von dynamischen SQL-Anweisungen ausgeführt werden. Es handelt sich um eine ausführbare Anweisung, die nur dann dynamisch vorbereitet werden kann, wenn das DYNAMICRULES-Ausführungsverhalten für das Paket aktiviert ist (SQLSTATE 42509).

Berechtigung

Die Berechtigungen der Berechtigungs-ID der Anweisung müssen mindestens eine der folgenden Berechtigungen für die Tabelle und alle untergeordneten Tabellen einer Tabellenhierarchie enthalten:
  • Zugriffsrecht DELETE für die Tabelle, die abgeschnitten werden soll
  • Zugriffsrecht DELETEIN für das Schema, das die Tabelle enthält
  • Zugriffsrecht CONTROL für die Tabelle, die abgeschnitten werden soll
  • Berechtigung DATAACCESS für das Schema, das die Tabelle enthält
  • Berechtigung DATAACCESS
Um alle für die Tabelle definierten DELETE-Trigger zu ignorieren, müssen die Berechtigungen der Berechtigungs-ID der Anweisung mindestens eine der folgenden Berechtigungen für die Tabelle und alle untergeordneten Tabellen einer Tabellenhierarchie enthalten:
  • Zugriffsrecht ALTER für die Tabelle
  • Zugriffsrecht ALTERIN für das Schema, das die Tabelle und alle untergeordneten Tabellen einer Tabellenhierarchie enthält
  • Zugriffsrecht CONTROL für die Tabelle
  • Berechtigung SCHEMAADM für das Schema, das die Tabelle und alle untergeordneten Tabellen einer Tabellenhierarchie enthält
  • Berechtigung DBADM
Um eine Tabelle abzuschneiden, die durch eine Sicherheitsrichtlinie geschützt ist, müssen die Berechtigungen der Berechtigungs-ID der Anweisung mindestens eine der folgenden Berechtigungen enthalten:
  • Zugriffsrecht CONTROL für die Tabelle
  • Berechtigung DBADM
Um eine Tabelle abzuschneiden, für die die Zeilenzugriffssteuerung aktiviert ist, muss die Berechtigungs-ID der Anweisung mindestens eine der folgenden Berechtigungen enthalten:
  • Zugriffsrecht CONTROL für die Tabelle
  • Berechtigung DBADM

Syntax

Read syntax diagramSkip visual syntax diagram TRUNCATE TABLE table-name DROP STORAGEREUSE STORAGE IGNORE DELETE TRIGGERSRESTRICT WHEN DELETE TRIGGERS CONTINUE IDENTITY IMMEDIATE1
Notes:
  • 1 IMMEDIATE is optional only for column-organized tables.

Beschreibung

tabellenname
Gibt die Tabelle an, die abgeschnitten werden soll. Der Name muss eine Tabelle angeben, die auf dem aktuellen Server vorhanden ist (SQLSTATE 42704), aber es darf sich nicht um eine Katalogtabelle (SQLSTATE 42832), einen Kurznamen (SQLSTATE 42809), eine Sicht, eine untergeordnete Tabelle, eine Zwischenspeichertabelle, eine vom System verwaltete MQT (Materialized Query Table), eine temporale Tabelle für Systemzeitraum (SQLSTATE 428HZ) oder eine Bereichsclustertabelle (SQLSTATE 42807) handeln.

Wenn tabellenname die Stammtabelle einer Tabellenhierarchie ist, werden alle Tabellen in der Tabellenhierarchie abgeschnitten.

DROP STORAGE oder REUSE STORAGE
Gibt an, ob der vorhandene Speicher, der für die Tabelle zugeordnet ist, gelöscht oder wiederverwendet werden soll. Der Standardwert ist DROP STORAGE.
DROP STORAGE
Der gesamte für die Tabelle zugeordnete Speicher wird freigegeben und verfügbar gemacht. Wird diese Option (implizit oder explizit) angegeben, wird eine Onlinesicherung blockiert.
REUSE STORAGE
Der gesamte für die Tabelle zugeordnete Speicher wird weiterhin für die Tabelle zugeordnet, aber der Speicher wird als leer betrachtet. Diese Option gilt nur für Tabellen in DMS-Tabellenbereichen und wird andernfalls ignoriert.
IGNORE DELETE TRIGGERS oder RESTRICT WHEN DELETE TRIGGERS
Gibt an, welche Schritte ausgeführt werden müssen, wenn Trigger für Löschvorgänge in der Tabelle definiert sind. Der Standardwert ist IGNORE DELETE TRIGGERS.
IGNORE DELETE TRIGGERS
Alle für die Tabelle definierten Trigger für Löschvorgänge werden durch den Abschneidevorgang nicht aktiviert.
RESTRICT WHEN DELETE TRIGGERS
Wenn Trigger für Löschvorgänge in der Tabelle definiert sind, wird ein Fehler (SQLSTATE 428GJ) zurückgegeben.
CONTINUE IDENTITY
Wenn eine Identitätsspalte für die Tabelle vorhanden ist, wird der nächste generierte Wert für die Identitätsspalte mit dem nächsten Wert fortgesetzt, der generiert worden wäre, wenn die Anweisung TRUNCATE nicht ausgeführt worden wäre.
IMMEDIATE
Gibt an, dass die Abschneideoperation sofort verarbeitet wird und nicht rückgängig gemacht werden kann. Die Anweisung muss die erste Anweisung in einer Transaktion sein (SQLSTATE 25001).

Die abgeschnittene Tabelle steht sofort zur Verwendung in derselben Arbeitseinheit zur Verfügung. Obwohl eine Anweisung ROLLBACK nach einer Anweisung TRUNCATE ausgeführt werden darf, wird die Abschneideoperation nicht rückgängig gemacht und die Tabelle verbleibt in einem abgeschnittenen Status. Wenn beispielsweise eine andere Datenänderungsoperation für die Tabelle nach der Anweisung TRUNCATE IMMEDIATE ausgeführt wird und dann die Anweisung ROLLBACK ausgeführt wird, wird die Abschneideoperation nicht rückgängig gemacht, aber alle anderen Datenänderungsoperationen werden rückgängig gemacht.

Regeln

  • Referenzielle Integrität: Die Tabelle und alle Tabellen in einer Tabellenhierarchie dürfen keine übergeordnete Tabelle in einer erzwungenen referenziellen Integritätsbedingung (SQLSTATE 428GJ) sein. Eine auf sich selbst verweisende RI-Integritätsbedingung ist zulässig.
  • Partitionierte Tabellen: Die Tabelle darf sich nicht im Status 'Festlegen der Integrität anstehend' befinden, da sie zum Anhängen einer Datenpartition geändert werden soll (SQLSTATE 55019). Die Tabelle muss vor der Ausführung der Anweisung TRUNCATE auf Integrität überprüft werden. Die Tabelle darf keine logisch freigegebenen Partitionen haben (SQLSTATE 55057). Die Task zum Abhängen der asynchronen Partition muss abgeschlossen sein, bevor die Anweisung TRUNCATE ausgeführt wird.
  • Exklusiver Zugriff: Keine andere Sitzung kann über einen Cursor auf der Tabelle oder über eine Sperre für die Tabelle verfügen (SQLSTATE 25001).
  • WITH HOLD-Cursor: Die aktuelle Sitzung kann keinen WITH HOLD-Cursor auf der Tabelle haben (SQLSTATE 25001).

Hinweise

  • Tabellenstatistik: Die Statistikdaten für die Tabelle werden durch die Anweisung TRUNCATE nicht geändert.
  • Anzahl der gelöschten Zeilen: SQLERRD (3) im SQL-Kommunikationsbereich (SQLCA) wird für die Abschneideoperation auf -1 gesetzt. Die Anzahl Zeilen, die aus der Tabelle gelöscht wurden, wird nicht zurückgegeben.

Beispiele

  • Beispiel 1: Leeren Sie eine nicht verwendete Bestandstabelle unabhängig von vorhandenen Triggern und geben Sie den zugeordneten Speicherplatz zurück.
       TRUNCATE TABLE INVENTORY
         IGNORE DELETE TRIGGERS
         DROP STORAGE
         IMMEDIATE
  • Beispiel 2: Leeren Sie eine nicht verwendete Bestandstabelle unabhängig von vorhandenen Triggern für den Löschvorgang, behalten Sie jedoch den zugeordneten Speicherplatz für eine spätere Wiederverwendung bei.
       TRUNCATE TABLE INVENTORY
          REUSE STORAGE
          IGNORE DELETE TRIGGERS
          IMMEDIATE