DELETE (SQL)

This Dokument behandelt folgende Themen:

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

Gehört zur Funktionsgruppe: Datenbankzugriffe und Datenbankänderungen

Siehe auch DELETE - SQL im Teil Natural for Db2 in der Datenbankmanagementsystem-Schnittstellen-Dokumentation:


Funktion

Das SQL-DELETE-Statement dient dazu, entweder Zeilen aus einer Tabelle zu löschen, ohne einen Cursor zu verwenden (Searched DELETE), oder Zeilen aus einer Tabelle zu löschen, auf die der Cursor positioniert ist (Positioned DELETE).

Zwei unterschiedliche Strukturen sind möglich:

Syntax 1 - Searched DELETE

Searched DELETE ist ein eigenständiges Statement, das unabhängig von einem SELECT-Statement verwendet werden kann. Mit einem einzigen Statement können sie Null, eine, mehrere oder alle Zeilen einer Tabelle löschen. Welche Zeilen gelöscht werden, bestimmen Sie mit einer Suchbedingung (search-condition), die auf die Tabelle angewandt wird. Optional ist es möglich, dem Tabellennamen einen correlation-name zuzuweisen.

Anmerkung:
Die Anzahl der Zeilen, die mit einem Searched DELETE tatsächlich gelöscht worden sind, kann mit der Systemvariablen *ROWCOUNT ermittelt werden; see Systemvariablen-Dokumentation.

Common Set-Syntax:

DELETE FROM table-name [correlation-name] [WHERE search-condition]

Extended Set-Syntax:

DELETE FROM table-name [period-clause] [correlation-name]
[include-columns [SET assignment-clause]]
[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-Symbole.

Syntax-Element-Beschreibung:

Syntax-Element Beschreibung
FROM table-name
FROM-Klausel:

In dieser Klausel wird die Tabelle angegeben, aus der die Zeilen gelöscht werden sollen.

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
Korrelationsname:

Optional. Dem Tabellennamen kann ein Korrelationsname zugeordnet werden.

include-columns
Include Columns-Klausel:

Optional. Gibt einen Satz Spalten an, die zusammen mit den table-name-Spalten in die Ergebnistabelle des DELETE-Statement aufgenommen werden, wenn dieses in der FROM-Klausel eines SELECT-Statement verschachtelt ist.

Weitere Informationen siehe include-columns.

SET assingment-clause
SET Assignment-Klausel:

Leitet die Zuordnung von Werten zu den inkludierten Spalten der Include Columns-Klausel ein. Siehe Assignment-Klausel beim SQL UPDATE-Statement.

WHERE search-condition
WHERE-Klausel:

Diese Klausel dient zur Angabe der Selektionskriterien für die zu löschenden Zeilen.

Wenn keine WHERE-Klausel angegeben wird, wird die gesamte Tabelle gelöscht.

WITH
WITH Isolation Level-Klausel:

Diese Klausel gehört zum SQL Extended Set.

Diese Klausel ermöglicht die explizite Angabe der beim Suchen der zu löschenden Zeile benutzten Isolationsstufe.

CS Cursor Stability
RR Repeatable Read
RS Read Stability
SKIP LOCKED DATA
SKIP LOCKED DATA-Klausel:

Diese Klausel gibt an, dass Zeilen übersprungen werden, wenn auf der Zeile inkompatible Sperren durch andere Transaktionen vorhanden sind.

QUERYNO integer
QUERYNO-Klausel:

Diese Klausel gehört zum SQL Extended Set.

Diese Klausel gibt die in EXPLAIN-Ausgaben und Ablaufverfolgungssätzen für dieses Statement zu benutzende Anzahl explizit an. Die Anzahl wird als QUERYNO-Spalte in der PLAN_TABLE für die Zeilen benutzt, die Informationen zu diesem Statement enthalten.

Syntax 2 - Positioned DELETE

Ein Positioned DELETE bezieht sich immer auf einen Cursor innerhalb einer Datenbankschleife. Es muss daher dieselbe Tabelle referenzieren wie das entsprechende SELECT-Statement, sonst wird eine Fehlermeldung zurückgegeben. Ein Positioned DELETE kann nicht mit einer Selektion ohne Curosor verwendet werden.

In seiner Funktion entspricht das Positioned DELETE-Statement dem Natural-DML-Statement DELETE.

Common Set-Syntax:

DELETE FROM table-name WHERE CURRENT OF CURSOR [(r)]

Extended Set-Syntax:

DELETE FROM table-name WHERE CURRENT OF CURSOR [(r)]

FOR ROW

[:]host-variable
integer

OF ROWSET

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

Syntax-Element-Beschreibung:

Syntax-Element Beschreibung
FROM table-name WHERE CURRENT OF CURSOR
FROM-Klausel:

Diese Klausel gibt die Tabelle an, aus der die Zeilen gelöscht werden sollen.

(r)
Statement-Referenz:

Die Notation (r) dient zur Referenzierung des Statements, welches zur Selektion der zu löschenden Zeile verwendet wurde. Wenn keine Statement-Referenz angegeben wird, dann bezieht sich das DELETE-Statement auf die jeweils innerste aktive 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 DELETE-Statements gibt an, welche Zeile des aktuellen Rowset gelöscht werden muss. Sie sollte nur angegeben werden, wenn sich das DELETE-Statement auf ein SELECT-Statement mit Positionierung von Rowsets und Spalten-Arrays in dessen INTO-Klausel bezieht. Wenn diese Klausel weggelassen wird, werden alle Zeilen des aktuellen Rowset gelöscht.