DELETE-Anweisung (delete_statement)
Die DELETE-Anweisung (
delete_statement ) löscht Zeilen einer Tabelle.Syntax
<delete_statement> ::=
DELETE [FROM] <table_name> [<reference_name>] [KEY <key_spec>,...] [WHERE <search_condition>]
| DELETE [FROM] <table_name> [<reference_name>] WHERE CURRENT OF <result_table_name>
Erläuterung
Der Tabellenname muß eine existierende Basistabelle, View-Tabelle (siehe
Tabelle) oder ein Synonym identifizieren.Der aktuelle Benutzer muß das DELETE-Privileg für die angegebene Tabelle besitzen. Falls der angegebene Tabellenname eine View-Tabelle identifiziert, ist es möglich, daß selbst der Eigentümer der View-Tabelle das DELETE-Privileg nicht besitzt, weil die View-Tabelle nicht änderbar ist.
Tabellenname identifiziert eine View-Tabelle: Die Zeilen der Basistabellen werden gelöscht, die der View-Tabelle zugrundeliegen.
Tabellenname identifiziert eine Join-View-Tabelle: Es werden nur folgende Zeilen gelöscht:
Welche Zeilen der angegebenen Tabelle gelöscht werden, wird durch eine der folgende Angaben festgelegt:
CURRENT OF
Wenn CURRENT OF angegeben ist, muß der Tabellenname in der
FROM-Klausel der QUERY-Anweisung, mit der die Ergebnistabelle ( result_table_name ) aufgebaut wurde, mit dem Tabellennamen in der DELETE-Anweisung übereinstimmen.Wenn CURRENT OF angegeben ist, und der Cursor auf einer Zeile der Ergebnistabelle steht, wird die korrespondierende Zeile gelöscht. Korrespondierend ist die Zeile aus der in der FROM-Klausel der QUERY-Anweisung angegebenen Tabelle, aus der die Zeile der Ergebnistabelle gebildet wurde. Voraussetzung dafür ist jedoch, daß die Ergebnistabelle mit FOR UPDATE spezifiziert wurde. Der Cursor steht anschließend hinter der Zeile der Ergebnistabelle. Es kann keine Aussage darüber getroffen werden, ob die Änderung in der korrespondierenden Zeile beim nächsten Zugriff auf die gleiche Zeile der Ergebnistabelle sichtbar ist oder nicht.
DELETE-Regel
Für jede im Verlauf der DELETE-Anweisung gelöschte Zeile, die aus einer referenzierten Tabelle (
referenced_table ) mindestens einer referentiellen CONSTRAINT-Definition stammt, wird in Abhängigkeit von der DELETE-Regel der referentiellen CONSTRAINT-Definition eine der folgenden Aktionen durchgeführt:Trigger
Wenn für Basistabellen, aus denen durch die DELETE-Anweisung Zeilen gelöscht werden,
Trigger definiert wurden, die nach einer DELETE -Anweisung auszuführen sind, so werden diese ausgeführt. Scheitert einer dieser Trigger, scheitert die DELETE -Anweisung.Weitere Informationen
Bei der DELETE-Anweisung wird der dritte Eintrag von SQLERRD in der SQLCA mit der Anzahl der gelöschten Zeilen belegt. Wenn dieser Zähler den Wert -1 hat, wurde ein großer Teil oder die vollständige Tabelle durch diese DELETE-Anweisung gelöscht.
Treten im Verlauf der DELETE-Anweisung Fehler auf, scheitert die Anweisung und die Tabelle bleibt unverändert.