Согласно документации если мы выполняем цикл по таблице возвращаемой из функционального метода, конструкторных выражений, или табличных выражений, с последующим присвоением к символьным переменным (ASSIGNING) или ссылочным переменным REFERENCE INTO, среда создаёт временную таблицу для данного цикла.
If the internal table is specified as the return value or result of a functional method, a constructor expression, or a table expression, the value is persisted for the duration of the loop. Afterwards, it is no longer possible to access the internal table.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
CLASS lcl_app DEFINITION. PUBLIC SECTION. TYPES tt_data TYPE STANDARD TABLE OF i WITH EMPTY KEY. DATA mt_data TYPE tt_data. METHODS: get_data RETURNING VALUE(rt_data) TYPE tt_data, change_data. ENDCLASS. CLASS lcl_app IMPLEMENTATION. METHOD get_data. rt_data = mt_data. ENDMETHOD. METHOD change_data. LOOP AT get_data( ) ASSIGNING FIELD-SYMBOL(<lv_data>). <lv_data> = <lv_data> + 1. ENDLOOP. ENDMETHOD. ENDCLASS. START-OF-SELECTION. DATA(lo_app) = NEW lcl_app( ). lo_app->mt_data = VALUE #( ( 1 ) ). lo_app->change_data( ). cl_demo_output=>display( lo_app->mt_data ). |
Далее рассмотрим как это выглядит при анализе используемой памяти в отладке.