Tabellenzeilen über den Index löschen 

Die Anweisung DELETE, die auch zum Löschen von Zeilen beliebiger Tabellen dient, erlaubt auch das Löschen über den Zeilenindex. Es können einzelne oder mehrere Zeilen über den Index gelöscht werden.

Einzelne Zeilen löschen

Um eine Zeile über den Index zu löschen, verwendet man folgende Anweisung:

DELETE <itab> [INDEX <idx>].

Bei Verwendung der Option INDEX wird die Zeile mit dem Index <idx> aus der Tabelle <itab> gelöscht, der Index der folgenden Zeilen um 1 erniedrigt und SY-SUBRC auf 0 gesetzt. Gibt es keine Zeile mit dem Index <idx>, wird SY-SUBRC auf 4 gesetzt.

Ohne den Zusatz INDEX kann obige Anweisung nur innerhalb einer LOOP-Schleife verwendet werden. Dann wird die aktuelle Zeile gelöscht. <idx> wird also implizit auf SY-TABIX gesetzt.

Mehrere Zeilen löschen

Um mehrere Zeilen über den Index zu löschen, verwendet man folgende Anweisung:

DELETE <itab> [FROM <n1>] [TO <n 2>] [WHERE <condition>].

Dabei muß mindestens einer der Zusätze angegeben werden. Der WHERE-Zusatz arbeitet wie beim Tabellenzeilen löschen in beliebigen Tabellen. Zusätzlich zum WHERE-Zusatz können die zu löschenden Zeilen bei Index-Tabellen auch direkt mit FROM und TO angegeben werden. Es werden alle Zeilen aus <itab> gelöscht, deren Index zwischen <n 1 > und <n 2 > liegt. Ohne den Zusatz FROM werden die Einträge ab der ersten Zeile gelöscht. Ohne den Zusatz TO werden die Einträge bis zur letzten Zeile gelöscht.

Wird mindestens eine Zeile gelöscht, wird SY-SUBRC auf 0, ansonsten auf 4 gesetzt.

DATA: BEGIN OF LINE,
         COL1 TYPE I,
         COL2 TYPE I,
      END OF LINE.

DATA ITAB LIKE SORTED TABLE OF LINE WITH UNIQUE KEY COL1.

DO 5 TIMES.
  LINE-COL1 = SY-INDEX.
  LINE-COL2 = SY-INDEX ** 2.
  APPEND LINE TO ITAB.
ENDDO.

DELETE ITAB INDEX: 2, 3, 4.

WRITE: 'SY-SUBRC =',SY-SUBRC.

SKIP.

LOOP AT ITAB INTO LINE.
  WRITE: / SY-TABIX, LINE-COL1, LINE-COL2.
ENDLOOP.

Die Listenausgabe ist:

SY-SUBRC     4

         1          1          1
         2          3          9
         3          5         25

Es wird eine sortierte Tabelle ITAB mit fünf Zeilen gefüllt. Dann werden drei Zeilen mit den Indizes 2, 3 und 4 gelöscht. Nach dem Löschen der Zeile mit Index 2, wird der Index der folgenden Zeilen um 1 erniedrigt. Beim nächsten Löschvorgang wird daher die Zeile gelöscht, die zuerst den Index 4 hatte. Der dritte Löschvorgang scheitert, weil die Tabelle nur noch aus 3 Zeilen besteht.

DATA: BEGIN OF LINE,
         COL1 TYPE I,
         COL2 TYPE I,
      END OF LINE.

DATA ITAB LIKE TABLE OF LINE.

DO 30 TIMES.
  LINE-COL1 = SY-INDEX.
  LINE-COL2 = SY-INDEX ** 2.
  APPEND LINE TO ITAB.
ENDDO.

LOOP AT ITAB INTO LINE.
  IF LINE-COL1 < 28.
    DELETE ITAB.
  ENDIF.
ENDLOOP.

LOOP AT ITAB INTO LINE.
  WRITE: / SY-TABIX, LINE-COL1, LINE-COL2.
ENDLOOP.

Die Listenausgabe ist:

         1        28        784

         2        29        841

         3        30        900

Es wird eine Standard Tabelle ITAB mit 30 Zeilen gefüllt. Innerhalb einer LOOP-Schleife werden alle Zeilen, deren Wert im Feld COL1 kleiner als 28 ist, gelöscht.

DATA: BEGIN OF LINE,
        COL1 TYPE I,
        COL2 TYPE I,
      END OF LINE.

DATA ITAB LIKE TABLE OF LINE.

DO 40 TIMES.
  LINE-COL1 = SY-INDEX.
  LINE-COL2 = SY-INDEX ** 2.
  APPEND LINE TO ITAB.
ENDDO.

DELETE ITAB FROM 3 TO 38 WHERE COL2 > 20.

LOOP AT ITAB INTO LINE.
  WRITE: / LINE-COL1, LINE-COL2.
ENDLOOP.

Die Listenausgabe ist:

         1          1

         2          4

         3          9

         4         16

        39      1.521

        40      1.600

Es werden alle Zeilen mit Index zwischen 3 und 39 aus der Standard-Tabelle ITAB gelöscht, bei denen die Werte in COL2 größer als 20 sind.