SAP 两个loop循环优化
SELECT * FROM MARA INTO TABLE @DATA(IT_MARA) UP TO 10000 ROWS.
CHECK IT_MARA IS NOT INITIAL.
SELECT * FROM MARC INTO TABLE @DATA(IT_MARC) FOR ALL ENTRIES IN @IT_MARA WHERE MATNR = @IT_MARA-MATNR.
GET TIME STAMP FIELD LV_TIME_S. "获得loop前的时间点
DATA LS_DATA LIKE MARC.
DATA LT_DATA LIKE TABLE OF MARC.
LOOP AT IT_MARA INTO DATA(IS_MARA).
LOOP AT IT_MARC INTO DATA(IS_MARC) WHERE MATNR = IS_MARA-MATNR.
MOVE-CORRESPONDING IS_MARC TO LS_DATA.
APPEND LS_DATA TO LT_DATA.
CLEAR LS_DATA.
ENDLOOP.
ENDLOOP.
GET TIME STAMP FIELD LV_TIME_E.
LV_TEXT = LV_TIME_E - LV_TIME_S.
DESCRIBE TABLE LT_DATA LINES DATA(LV_NUM_1).
WRITE: /(14) '普通循环时间:', LV_TEXT, '条目数量:' ,LV_NUM_1.
CLEAR: LV_TEXT, LV_TIME_E,LV_TIME_S,LT_DATA.
GET TIME STAMP FIELD LV_TIME_S.
**排序
SORT: IT_MARA BY MATNR,
IT_MARC BY MATNR.
LOOP AT IT_MARA INTO IS_MARA.
**取TABIX
READ TABLE IT_MARC TRANSPORTING NO FIELDS WITH KEY MATNR = IS_MARA-MATNR BINARY SEARCH.
IF SY-SUBRC = 0.
LV_TABIX = SY-TABIX.
LOOP AT IT_MARC FROM LV_TABIX INTO IS_MARC.
IF IS_MARA-MATNR <> IS_MARC-MATNR.
EXIT.
ENDIF.
MOVE-CORRESPONDING IS_MARC TO LS_DATA.
APPEND LS_DATA TO LT_DATA.
CLEAR LS_DATA.
ENDLOOP.
ENDIF.
ENDLOOP.
GET TIME STAMP FIELD LV_TIME_E.
DESCRIBE TABLE LT_DATA LINES DATA(LV_NUM_2).
LV_TEXT = LV_TIME_E - LV_TIME_S.
WRITE: /(14)'优化循环时间:', LV_TEXT,'条目数量:' ,LV_NUM_2.

浙公网安备 33010602011771号