DELETE (SQL)

#### Search Results

Search

# DELETE (SQL)

This Dokument behandelt folgende Themen:

- Funktion

- Syntax 1 - Searched DELETE

- Syntax 2 - Positioned DELETE

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 Database Management System Interfaces-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]
[`FETCH FIRST` row-limit]
| `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.
`FETCH FIRST` | FETCH FIRST-Klausel: Begrenzt die Auswirkungen des `DELETE`-Statement auf eine Teilmenge der in Frage kommenden Zeilen. Entspricht der beim `SELECT`-Statement beschriebenen `FETCH FIRST`-Klausel zur Begrenzung der Zeilen.
`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.

### On this page

- Funktion
- Syntax 1 - Searched DELETE
- Syntax 2 - Positioned DELETE