Source code below is an example of using the 'COLLECT' statement in the loop.
REPORT ZHIS_TUN_008_BEFORE.
DATA : BEGIN OF IT_VBAK OCCURS 0,
ERDAT TYPE VBAK-ERDAT,
NETWR TYPE VBAK-NETWR,
WAERK TYPE VBAK-WAERK,
END OF IT_VBAK.
DATA : BEGIN OF IT_VBAK2 OCCURS 0,
ERDAT TYPE VBAK-ERDAT,
NETWR TYPE VBAK-NETWR,
WAERK TYPE VBAK-WAERK,
END OF IT_VBAK2.
DATA : WA_VBAK LIKE IT_VBAK.
SELECT ERDAT NETWR WAERK
FROM VBAK INTO TABLE IT_VBAK.
LOOP AT IT_VBAK INTO WA_VBAK .
MOVE-CORRESPONDING: WA_VBAK TO IT_VBAK2.
COLLECT IT_VBAK2.
ENDLOOP.
WRITE :/ LINES( IT_VBAK2 ).
The results of analysis of the source code of the above in RUNTIME ANALYSIS are as follows:
The source code of using the 'GROUP BY' as follows, can be solved in the execution of one query.
REPORT ZHIS_TUNING_008_AFTER.
DATA : BEGIN OF IT_VBAK2 OCCURS 0,
ERDAT TYPE VBAK-ERDAT,
NETWR TYPE VBAK-NETWR,
WAERK TYPE VBAK-WAERK,
END OF IT_VBAK2.
SELECT ERDAT SUM( NETWR ) AS NETWR WAERK
FROM VBAK INTO TABLE IT_VBAK2
GROUP BY ERDAT WAERK.
WRITE :/ LINES( IT_VBAK2 ).
'DB: OPEN' time was slightly increased but 'DB: Fetch' time and 'INTERNAL PROCESSING BLOCKS' TIME is decreased
Because it sends only the final result