SAP ABAP - Interne Tabellen löschen

Die DELETE-Anweisung wird verwendet, um einen oder mehrere Datensätze aus einer internen Tabelle zu löschen. Die Datensätze einer internen Tabelle werden entweder durch Angabe eines Tabellenschlüssels oder einer Tabellenbedingung oder durch Auffinden doppelter Einträge gelöscht. Wenn eine interne Tabelle einen nicht eindeutigen Schlüssel hat und doppelte Einträge enthält, wird der erste Eintrag aus der Tabelle gelöscht.

Es folgt die Syntax, mit der die DELETE-Anweisung verwendet wird, um einen Datensatz oder eine Zeile aus einer internen Tabelle zu löschen.

DELETE TABLE <internal_table> FROM <work_area_itab>.

In der obigen Syntax ist der Ausdruck <work_area_itab> ein Arbeitsbereich und sollte mit dem Typ der internen Tabelle <internal_table> kompatibel sein. Der Löschvorgang wird auf der Grundlage eines Standardschlüssels ausgeführt, der den Arbeitsbereichskomponenten entnommen werden kann.

Sie können einen Tabellenschlüssel auch explizit in der Anweisung DELETE TABLE angeben, indem Sie die folgende Syntax verwenden:

DELETE TABLE <internal_table> WITH TABLE KEY <K1> = <F1>………… <Kn> = <Fn>.

In dieser Syntax sind <F1>, <F2> .... <Fn> die Felder einer internen Tabelle und <K1>, <K2> .... <Kn> die Schlüsselfelder der Tabelle. Die DELETE-Anweisung wird verwendet, um die Datensätze oder Zeilen der Tabelle <internal_table> basierend auf den Ausdrücken <K1> = <F1>, <K2> = <F2> ... <Kn> = <Fn> zu löschen.

Note - Wenn die Datentypen der Felder <F1>, <F2> .... <Fn> nicht mit den Schlüsselfeldern <K1>, <K2> ... <Kn> kompatibel sind, konvertiert das SAP-System sie automatisch in das kompatible Format.

Beispiel

REPORT  ZDELETE_DEMO. 
DATA: BEGIN OF Line1, 
ColP TYPE I, 
ColQ TYPE I, 
END OF Line1. 
DATA mytable LIKE HASHED TABLE OF Line1  
WITH UNIQUE KEY ColP. 
DO 8 TIMES. 

Line1-ColP = SY-INDEX. 
Line1-ColQ = SY-INDEX + 4. 
INSERT Line1 INTO TABLE mytable. 
ENDDO. 

Line1-ColP = 1. 
DELETE TABLE mytable: FROM Line1, 
WITH TABLE KEY ColP = 3.
LOOP AT mytable INTO Line1. 

WRITE: / Line1-ColP, Line1-ColQ. 
ENDLOOP.

Der obige Code erzeugt die folgende Ausgabe -

2         6 
4         8 
5         9 
6         10 
7         11 
8         12

In diesem Beispiel hat mytable zwei Felder, ColP und ColQ. Zu Beginn wird mytable mit acht Zeilen gefüllt, wobei der ColP die Werte 1, 2, 3, 4, 5, 6, 7 und 8 enthält. Der ColQ enthält die Werte 5, 6, 7, 8, 9, 10, 11 und 12, da die ColP-Werte jedes Mal um 4 erhöht werden.

Die DELETE-Anweisung wird verwendet, um die Zeilen aus mytable zu löschen, wobei der Wert des ColP-Schlüsselfelds entweder 1 oder 3 ist. Nach dem Löschen enthält das ColP-Feld von mytable die Werte 2, 4, 5, 6, 7 und 8, wie gezeigt in der Ausgabe. Das ColQ-Feld enthält die Werte 6, 8, 9, 10, 11 und 12.