I have written a code to get all records into internal table using select query, perform concatenation on it and update the DB from this internal table.
To improve performance how can I select specific number of records like 1000 records, process them and after updating the DB select next 1000 records and so on.
Here is my code
DATA: lv_index_table TYPE /ngv/b0tabnm,
lref_tname TYPE REF TO data.
FIELD-SYMBOLS: <lt_indx_table> TYPE ANY TABLE,
<lwa_indx_table> TYPE any.
CALL METHOD /ngv/cl_bmtr_framework=>generated_table_get
EXPORTING
i_dtarea = /ngv/if_bcon=>mc_data_area-index
IMPORTING
e_table = lv_index_table "here i get DB table name .
EXCEPTIONS
table_not_found = 1
OTHERS = 2.
CHECK lv_index_table IS NOT INITIAL.
CREATE DATA lref_tname TYPE TABLE OF (lv_index_table).
ASSIGN lref_tname->* TO <lt_indx_table>.
CHECK <lt_indx_table> IS ASSIGNED.
SELECT * FROM (lv_index_table) INTO TABLE <lt_indx_table> UP TO 1000 ROWS.
LOOP AT <lt_indx_table> ASSIGNING <lwa_indx_table>.
ASSIGN COMPONENT 'EXTID' OF STRUCTURE <lwa_indx_table> TO FIELD-SYMBOL(<lv_extid>).
ASSIGN COMPONENT 'MTRCT' OF STRUCTURE <lwa_indx_table> TO FIELD-SYMBOL(<lv_mtrct>).
ASSIGN COMPONENT 'MSKVL' OF STRUCTURE <lwa_indx_table> TO FIELD-SYMBOL(<lv_mskvl>).
CHECK <lv_extid> IS ASSIGNED AND <lv_mtrct> IS ASSIGNED AND <lv_mskvl> IS ASSIGNED.
CONCATENATE <lv_extid> '_' <lv_mtrct> INTO <lv_mskvl>.
ENDLOOP.
MODIFY (lv_index_table) FROM table <lt_indx_table>.