Code: Alles auswählen.
DATA: gt_sflight_tab2 TYPE STANDARD TABLE OF sflight WITH KEY carrid connid fldate,
gt_sflight_a TYPE STANDARD TABLE OF sflight WITH KEY carrid connid fldate,
gt_sflight_b TYPE SORTED TABLE OF sflight WITH UNIQUE KEY carrid connid fldate,
gt_sflight_c TYPE HASHED TABLE OF sflight WITH UNIQUE KEY carrid connid fldate,
gt_sflight_d TYPE STANDARD TABLE OF sflight WITH KEY carrid connid fldate,
g_start TYPE i,
g_end TYPE i,
g_runtime TYPE i.
FIELD-SYMBOLS: <wa_sflight_a> TYPE sflight.
START-OF-SELECTION.
SELECT * FROM sflight
INTO TABLE gt_sflight_tab2
WHERE carrid <> 'AZ'.
SELECT * FROM sflight
INTO TABLE gt_sflight_b
WHERE ( carrid = 'AA'
OR carrid = 'AZ' ).
gt_sflight_c[] = gt_sflight_b[].
gt_sflight_d[] = gt_sflight_b[].
SORT gt_sflight_d BY carrid connid fldate ASCENDING.
* Nachlesen in sortierter Tabelle
CLEAR: g_start, g_end, g_runtime.
gt_sflight_a[] = gt_sflight_tab2[].
GET RUN TIME FIELD g_start.
LOOP AT gt_sflight_a ASSIGNING <wa_sflight_a>.
READ TABLE gt_sflight_b WITH KEY carrid = <wa_sflight_a>-carrid
connid = <wa_sflight_a>-connid
fldate = <wa_sflight_a>-fldate
TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
DELETE gt_sflight_a USING KEY loop_key.
ENDIF.
ENDLOOP.
GET RUN TIME FIELD g_end.
g_runtime = g_end - g_start.
WRITE: / 'Delete after Read Sorted Table', g_runtime , 'micro seconds'.
* Nachlesen in hashed Tabelle
CLEAR: g_start, g_end, g_runtime.
gt_sflight_a[] = gt_sflight_tab2[].
GET RUN TIME FIELD g_start.
LOOP AT gt_sflight_a ASSIGNING <wa_sflight_a>.
READ TABLE gt_sflight_c WITH KEY carrid = <wa_sflight_a>-carrid
connid = <wa_sflight_a>-connid
fldate = <wa_sflight_a>-fldate
TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
DELETE gt_sflight_a USING KEY loop_key.
ENDIF.
ENDLOOP.
GET RUN TIME FIELD g_end.
g_runtime = g_end - g_start.
WRITE: / 'Delete after Read Hashed Table', g_runtime, 'micro seconds'.
* Nachlesen in standard Tabelle (sortiert, binary search)
CLEAR: g_start, g_end, g_runtime.
gt_sflight_a[] = gt_sflight_tab2[].
GET RUN TIME FIELD g_start.
LOOP AT gt_sflight_a ASSIGNING <wa_sflight_a>.
READ TABLE gt_sflight_d WITH KEY carrid = <wa_sflight_a>-carrid
connid = <wa_sflight_a>-connid
fldate = <wa_sflight_a>-fldate
TRANSPORTING NO FIELDS
BINARY SEARCH.
IF sy-subrc <> 0.
DELETE gt_sflight_a USING KEY loop_key.
ENDIF.
ENDLOOP.
GET RUN TIME FIELD g_end.
g_runtime = g_end - g_start.
WRITE: / 'Delete after Binary Search Standard Table', g_runtime, 'micro seconds'.
Code: Alles auswählen.
DELETE gt_fvmk WHERE bukrs NOT IN gt_fvmkvorher-bukrs
AND bdatj not in gt_fvmkvorher-bdatj
AND poper not in gt_fvmkvorher-poper
AND bwvar not in gt_fvmkvorher-bwvar.
Code: Alles auswählen.
LOOP AT tabelle1 ASSIGNING <zeile1>.
READ TABLE tabelle2 TRANSPORTING NO FIELDS WITH KEY ...
IF sy-subrc EQ 0. "= wenn gefunden
DELETE tabelle1. "= die aktuelle Zeile löschen
ENDIF.
ENDLOOP.
Code: Alles auswählen.
*&---------------------------------------------------------------------*
*& Report YBC_SUBQUERY_DELETE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ybc_subquery_delete.
DATA t1 TYPE TABLE OF ztest3.
SELECT * FROM ztest3 AS f INTO TABLE t1
WHERE NOT EXISTS ( SELECT * FROM ztest4 WHERE f1 = f~f1 ).
DELETE ztest3 FROM TABLE t1.
Code: Alles auswählen.
REPORT.
types: tt_mara type STANDARD TABLE OF mara with NON-UNIQUE DEFAULT KEY.
SELECT * UP TO 10 ROWS
INTO TABLE @DATA(lt_mara1)
FROM mara.
DELETE lt_mara1 FROM 7.
SELECT * UP TO 10 ROWS
INTO TABLE @DATA(lt_mara2)
FROM mara.
DELETE lt_mara2 TO 3.
DATA(lt_mara3) = VALUE tt_mara( FOR ls_mara1 IN lt_mara1
FOR ls_mara2 IN lt_mara2 WHERE ( table_line = ls_mara1 )
( ls_mara1 )
).
BREAK-POINT.
Ich will jetzt nicht die ganzen Loorbeeren alleine kassieren. Martin8703 hat vor mir schon die gleiche Lösung gepostet nur halt umfangreicher, deswegen ging der Loop etwas unterblack_adept hat geschrieben:Ist de facto auch nichts anderes als der von A-D-T vorgeschlagene Loop - aber eben als ein einziger Befehl mit den neuen Sprachelementen.
Das ist sehr löblicha-dead-trousers hat geschrieben: Ich will jetzt nicht die ganzen Loorbeeren alleine kassieren. Martin8703 hat vor mir schon die gleiche Lösung gepostet nur halt umfangreicher, deswegen ging der Loop etwas unter