Ansicht
Dokumentation

ABAPDELETE_WHERE - DELETE WHERE

ABAPDELETE_WHERE - DELETE WHERE

CPI1466 during Backup   CL_GUI_FRONTEND_SERVICES - Frontend Services  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

DELETE dbtab, cond

Kurzreferenz



... $[WHERE sql_cond$]
    $[ db_hints$]
    $[ORDER BY ... $[OFFSET o$]$] $[UP TO n ROWS$] ...


Zusätze:

1. ... WHERE sql_cond

2. ... db_hints

3. ... $[ORDER BY ... $[OFFSET o$]$] $[UP TO n ROWS$]

Wirkung

Diese Zusätze bestimmen in der Variante DELETE FROM target der Anweisung DELETE die zu löschenden Zeilen.

Zusatz 1

... WHERE sql_cond

Wirkung

Der Zusatz WHERE bestimmt, welche Zeilen der DDIC-Datenbanktabelle oder View gelöscht werden. Es werden die Zeilen gelöscht, für die der logische Ausdruck sql_cond wahr ist. Für den logischen Ausdruck sql_cond gilt die Einschränkung, dass keine Subqueries auf die zu verändernde DDIC-Datenbanktabelle ausgewertet werden können. Falls es in der Datenbank keine Zeile gibt, die der WHERE-Bedingung genügt, wird keine Zeile gelöscht und sy-subrc auf 4 gesetzt. Falls keine WHERE-Bedingung angegeben ist, werden alle bzw. maximal soviele Zeilen gelöscht, wie über den Zusatz UP TO angegeben sind. Es wirkt die implizite Mandantenbehandlung von . Standardmäßig werden bei einem mandantenabhängigen Ziel nur Zeilen des aktuellen Mandanten gelöscht. Die Mandantenspalte eines mandantenabhängigen Ziels kann in der WHERE-Bedingung nicht angegeben werden. Mit dem Zusatz USING kann die mplizite Mandantenbehandlung auf andere Mandanten umgestellt werden.

Hinweise

  • Wenn auf DDIC-Datenbanktabellen oder DDIC-Views mit generischer Tabellenpufferung zugegriffen wird, muss der gepufferte Bereich vollständig in der WHERE-Bedingung spezifiziert sein, ansonsten wird die Pufferung umgangen.
  • Wenn auf DDIC-Datenbanktabellen oder DDIC-Views mit Einzelsatzpufferung zugegriffen wird, müssen in der WHERE-Bedingung mit AND verknüpfte Gleichheitsbedingungen für alle Schlüsselfelder des Primärschlüssels aufgeführt sein, ansonsten wird die Pufferung umgangen.
  • Statt USING kann außerhalb des strikten Modus ab Release auch noch der obsolete Zusatz CLIENT SPECIFIED verwendet werden. Er schaltet die implizite Mandantenbehandlung abund die Mandantenspalte kann in der WHERE-Bedingung als Operand verwendet werden.

Beispiel

Löschen aller heutigen Flüge einer Fluggesellschaft aus der DDIC-Datenbanktabelle SFLIGHT, in denen keine Plätze belegt sind. Siehe auch das Beispiel zu dtab-source.

Zusatz 2

... db_hints

Wirkung

In der Variante DELETE FROM TARGET können mit db_hints Datenbankhinweise angegeben werden.

Zusatz 3

... $[ORDER BY ... $[OFFSET o$]$] $[UP TO n ROWS$]

Wirkung

Mit dem Zusatz ORDER BY ... werden die durch die WHERE-Bedingung festgelegten Zeilen sortiert. Mit dem Zusatz OFFSET werden nur Zeilen ab der Zählung o gelöscht. Der Zusatz UP TO begrenzt die Anzahl der zu löschenden Zeilen auf n.

Der Zusatz OFFSET kann nur zusammen mit ORDER BY ... angegeben werden. Der Zusatz ORDER BY ... kann nicht ohne OFFSET oder UP TO angegeben werden. Wenn der Zusatz UP TO ohne ORDER BY ... angegeben ist, ist es undefiniert, welche der in Frage kommenden Zeilen gelöscht werden.

Für n und o werden Hostvariablen, Hostausdrücke oder Literale vom Typ i erwartet, die alle nicht negativen Zahlen des Wertebereichs von i außer dessen Maximalwert +2.147.483.647 darstellen dürfen. Bei der Angabe von 0 für n wird dieser Maximalwert verwendet. Bei der Angabe von 0 für o hat der Zusatz OFFSET keine Wirkung. Es dürfen nur die Typen b, s, i oder int8 angegeben werden. Wenn n oder o als Literal oder Konstante angegeben sind, ist der Wert 0 nicht erlaubt.

Der Zusatz ORDER BY ... hat die gleiche Syntax und Bedeutung wie bei der SELECT-Anweisung mit dem Unterschied, dass in der DELETE-Anweisung nicht explizit nach der Mandantenspalte sortiert werden darf. Die SELECT-spezifischen Einschränkungen spielen dagegen keine Rolle.

Die Zusätze OFFSET und UP TO können nicht beim Zugriff auf DDIC-Projektions-Views verwendet werden.

Hinweise

  • Der Zusatz UP TO kann verwendet werden, um Fehler beim Löschen von Tabellen mit sehr vielen Einträgen zu verhindern. Solche Fehler können beispielsweise auftreten, wenn die interne Transaktionsverwaltung nicht mehr genügend Speicher hat. In einem solchen Fall kann es ohne die Benutzung von UP TO und einem anschließenden Datenbank-Commit zu einer Ausnahme auf der Datenbank kommen. Bei der Aufteilung des Löschvorgangs auf mehrere Ausführungen der Anweisung DELETE können solche Ressourcenengpässe verhindert werden, beispielsweise durch das Löschen der entsprechenden Protokolleinträge.
  • Wenn der Zusatz ORDER BY ... zwar angegeben ist, aber nicht eindeutig sortiert, ist es nicht definiert, welche Zeilen gelöscht werden.
  • Eine DELETE-Anweisung mit den Zusätzen OFFSET und UP TO wird wenn möglich auf der Datenbank als eine einzige Operation ausgeführt. Für Datenbanken, welche die Zusätze OFFSET und ORDER BY nicht unterstützen wird intern eine Zerlegung in SELECT- und DELETE-Anweisungen vorgenommen. Wenn die Protokollierung der Datenbanktabelle eingeschaltet ist, findet diese Zerlegung immer statt. Die Aufteilung auf verschiedene Anweisungen ist in der Regel langsamer als eine einzige Datenbankoperation.
  • Bei Verwendung der Zusätze OFFSET oder UP TO wird die Syntaxprüfung in einem strikten Modus ausgeführt, welche die Anweisung strenger behandelt als die normale Syntaxprüfung.

Beispiel

Löschen von Einträgen einer zuvor mit MODIFY gefüllten DDIC-Datenbanktabelle in mehreren Iterationen.






BAL_S_LOG - Application Log: Log header data   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 9421 Date: 20240508 Time: 133728     sap01-206 ( 163 ms )