Typen & Daten
* Typen
TYPES : BEGIN OF ty_s_sflight,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
seatsmax TYPE sflight-seatsmax,
flag TYPE abap_bool,
END OF ty_s_sflight.
TYPES: ty_it_sflight TYPE STANDARD TABLE OF ty_s_sflight WITH DEFAULT KEY.
* Daten
DATA(it_sflight) = VALUE ty_it_sflight( ).
* Select
SELECT carrid,
connid,
seatsmax,
CASE WHEN seatsmax > 200 THEN @abap_true " CASE-Anweisung zum Setzen der Spalte "flag"
END AS flag
INTO TABLE @it_sflight
FROM sflight.
Variante 1 (INDEX)
* Eintrag mit Index 1
DELETE it_sflight INDEX 1.
cl_demo_output=>display( it_sflight ).
Variante 2 (Struktur)
* Genau einen Eintrag entsprechend der Struktur
DELETE TABLE it_sflight FROM VALUE #( carrid = 'LH' connid = '400' seatsmax = 280 flag = abap_true ).
cl_demo_output=>display( it_sflight ).
Variante 3 (TABLE KEY)
* Einträge mit Primärschlüssel aus Tabelle löschen
DELETE TABLE it_sflight WITH TABLE KEY carrid = 'LH' connid = '400' flag = abap_true.
cl_demo_output=>display( it_sflight ).
Variante 4 (WHERE)
* Alle Einträge mit leerem flag löschen
DELETE it_sflight WHERE flag IS INITIAL.
* Alle Einträge innerhalb eines Bereiches löschen
DELETE it_sflight WHERE seatsmax > 200 AND seatsmax < 350.
* Alle Einträge die nicht der Bedingung entsprechen
DELETE it_sflight WHERE NOT carrid = 'AA'.
cl_demo_output=>display( it_sflight ).
Variante 5 (RANGE)
* alle Carrier, die nicht 'AA' sind aus der iTab löschen
DELETE it_sflight WHERE NOT carrid IN VALUE rseloption( ( sign = 'I'
option = 'EQ'
low = 'AA'
high = '' ) ).
cl_demo_output=>display( it_sflight ).
Variante 6 (RANGE mit Pattern)
* Alle Einträge beginnend mit 'A' und 'L' löschen
DELETE it_sflight WHERE carrid IN VALUE rseloption( ( sign = 'I'
option = 'CP'
low = 'A*'
high = '' )
( sign = 'I'
option = 'CP'
low = 'L*'
high = '' ) ).
cl_demo_output=>display( it_sflight ).
Variante 7 (RANGE leer)
* Achtung: löscht alle Einträge in it_sflight!
DELETE it_sflight WHERE carrid IN VALUE rseloption( ).
cl_demo_output=>display( it_sflight ).
Variante 8 (Pattern CP)
* alle Einträge, deren carrid mit 'L' beginnen
DELETE it_sflight WHERE carrid CP 'L*'.
cl_demo_output=>display( it_sflight ).
Variante 9 (dynamische WHERE-Condition)
* Stringtab mit WHERE-Conditions -> Leerzeichen beachten!
DATA(it_where) = VALUE stringtab(
( |testfehler = 'AA'| )
( |carrid EQ 'AA' AND connid CP '001*' | )
( |seatsmax > 300| )
).
LOOP AT it_where ASSIGNING FIELD-SYMBOL(<w>).
WRITE: / <w>.
TRY.
* dynamische WHERE-Condition ausführen
* fehlerhafte WHERE-Conditions werfen eine Exception
DELETE it_sflight WHERE (<w>).
CATCH cx_root INTO DATA(e_txt).
WRITE: / e_txt->get_text( ).
ENDTRY.
ENDLOOP.
cl_demo_output=>display( it_sflight ).
Variante 10 (Pseudokomponente TABLE_LINE)
* Die Tabellenzeile mit der Struktur ty_s_sflight wird gelöscht
DELETE it_sflight WHERE table_line = VALUE ty_s_sflight( carrid = 'LH' connid = '400' seatsmax = 280 flag = abap_true ).
cl_demo_output=>display( it_sflight ).
Variante 11 (CO [Contains Only])
* Carrier darf nur Zeichen 'A' und/oder 'Z' und/oder ' ' enthalten
* -> löscht Einträge für 'AA ', 'AZ '
DELETE it_sflight WHERE carrid CO 'AZ '.
cl_demo_output=>display( it_sflight ).