DELETE FROM-Anweisung

Die Anweisung DELETE FROM löscht auf Grundlage einer Suchbedingung Zeilen aus einer Tabelle in einer externen Datenbank.

SYNTAX

Alle Zeilen, für die der WHERE-Klauselausdruck den Wert TRUE ermittelt, werden aus der von TableReference angegebenen Tabelle gelöscht.

Nacheinander wird jede Zeile untersucht, und eine Variable wird so eingerichtet, dass sie auf die aktuelle Zeile verweist. Für gewöhnlich greift der WHERE-Klauselausdruck mit dieser Variablen auf Spaltenwerte zu, wodurch Zeilen entsprechend ihres Inhalts entweder beibehalten oder gelöscht werden. Auf die Variable wird entweder über Korrelationsname verwiesen bzw. bei Nichtvorhandensein einer AS-Klausel über Tabellenname.

Tabellenverweis

Ein Tabellenverweis ist ein Sonderfall der Feldverweise, mit dem auf Nachrichtenbaumstrukturen verwiesen wird. Er beginnt immer mit dem Wort "Database" (Datenbank) und kann wahlweise Folgendes enthalten:
  • Nur einen Tabellennamen
  • Einen Schemanamen und einen Tabellennamen
  • Einen Datenquellnamen (d. h. den Namen einer Datenbankinstanz), einen Schemanamen und einen Tabellennamen
In allen Fällen kann der Name direkt oder durch einen Ausdruck in Klammern ({...}) angegeben werden. Der direkt angegebene Name einer Datenquelle, eines Schemas oder einer Tabelle kann ersetzt werden. Das bedeutet, dass wenn der Name als bekannter Name deklariert wurde, nicht der Name selbst verwendet wird, sondern der Wert des deklarierten Namens (siehe DECLARE-Anweisung).

Wird kein Schemaname angegeben, wird das Standardschema des Benutzers der Broker-Datenbank verwendet.

Wenn Sie keinen Datenquellnamen angeben, wird die Datenbank verwendet, auf die das Datenquellattribut des Knotens verweist.

Die WHERE-Klausel

Der WHERE-Klauselausdruck kann alle Operatoren und Funktionen des Brokers in beliebiger Kombination verwenden. Er kann auf Tabellenspalten, Nachrichtenfelder und auf jede andere deklarierte Variable oder Konstante verweisen.

Beachten Sie jedoch, dass der Broker den WHERE-Klauselausdruck untersucht und entscheidet, ob der gesamte Ausdruck von der Datenbank bewertet werden kann. Wenn dies der Fall ist, wird er an die Datenbank übergeben. Damit ein Ausdruck von der Datenbank ausgewertet wird, darf er nur die von der Datenbank unterstützten Funktionen und Operatoren enthalten.

Die WHERE-Klausel kann jedoch auf Nachrichtenfelder, auf von enthaltenen SELECT-Funktionen deklarierte Korrelationsnamen sowie auf jede andere deklarierte Variable oder Konstante verweisen, die im Gültigkeitsbereich liegt.

Kann die Datenbank den gesamten Ausdruck nicht bewerten, sucht der Broker auf höchster Ebene nach AND-Operatoren und untersucht jeden Unterausdruck einzeln. Anschließend versucht er, die auswertbaren Unterausdrücke an die Datenbank zu übergeben. Alle übrigen werden vom Broker ausgewertet.Diese Vorgehensweise ist aus zwei Gründen zu beachten:
  1. Scheinbar harmlose Änderungen von Ausdrücken in einer WHERE-Klausel können die Leistung erheblich beeinflussen. Sie können ermitteln, ein wie großer Teil des Ausdrucks an die Datenbank übergeben wurde, indem Sie einen Benutzertrace auswerten.
  2. Das Verhalten einiger Datenbankfunktionen weicht leicht vom Verhalten des Brokers ab.

Fehler behandeln

Bei den Löschvorgängen können Fehler auftreten, beispielsweise könnte die Datenbank nicht betriebsbereit sein. In diesen Fällen wird eine Ausnahme ausgelöst (ausgenommen, die Knoteneigenschaft Ausnahme für Datenbankfehler ausgeben wurde auf FALSE gesetzt). Diese Ausnahmen richten die entsprechenden Wert für den SQL-Code, den Status, den systemeigenen Fehler und den Fehlertext ein und können von Fehlerbehandlungsprogrammen bearbeitet werden (siehe Anweisung DECLARE HANDLER).

Weitere Informationen zur Behandlung von Datenbankfehlern finden Sie unter Datenbankstatus erfassen.

Beispiele

Im folgenden Beispiel wird davon ausgegangen, dass die Eigenschaft dataSource (Datenquelle) konfiguriert wurde und dass die von ihr angegebene Datenbank SHAREHOLDINGS heißt und eine Spalte namens ACCOUNTNO enthält.
DELETE FROM Database.SHAREHOLDINGS AS S
       WHERE S.ACCOUNTNO = InputBody.AccountNumber;

Damit werden alle Zeilen aus der Tabelle SHAREHOLDINGS gelöscht, in denen der Wert in der Spalte ACCOUNTNO (in der Tabelle) dem Wert im Nachrichtenfeld AccountNumber entspricht. Dabei können keine, eine oder mehrere Zeilen aus der Tabelle gelöscht werden.

Das nächste Beispiel zeigt die Verwendung des Namens einer berechneten Datenquelle, eines Schemas und einer Tabelle:
-- Variablen deklarieren, die den Namen der Datenquelle, des Schemas und der Tabelle halten sollen und
-- ihre Standardwerte einrichten
DECLARE Source CHARACTER 'Produktion';
DECLARE Schema CHARACTER 'db2admin';
DECLARE Table  CHARACTER 'DynamischeTabelle1';

-- Hier steht der Code, der ihren tatsächlicher Wert berechnet

-- Zeilen aus Tabelle löschen
DELETE FROM Database.{Source}.{Schema}.{Table} As R WHERE R.Name = 'Joe';
Zugehörige Konzepte
Übersicht zu ESQL
Zugehörige Tasks
ESQL erstellen
Zugehörige Verweise
Syntaxdiagramme: verfügbare Typen
ESQL-Anweisungen
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ak04990_