Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
Using ABAP, changing a value in itab by getting data from database table
You should do this using a MODIFY statement as shown below ?
LOOP AT itab.
SELECT SINGLE matnr INTO itab-matnr
FROM zlldet WHERE palet = itab-palet.
MODIFY itab.
ENDLOOP.
Also note that when you have an internal table itab with a header line, it means that you have a table itab and structure itab and usage of this depends on the situation. Few of the commands like MODIFY and LOOP AT use both at the same time.
Modern Approach Without Header Line
The modern approach is to avoid header lines and use explicit work areas ?
DATA itab TYPE TABLE OF [something].
DATA wa TYPE [something].
LOOP AT itab INTO wa. " copies each line into wa
SELECT SINGLE matnr INTO wa-matnr
FROM zlldet WHERE palet = wa-palet.
MODIFY itab FROM wa. " writes the changed line back to the table
ENDLOOP.
Using Field Symbols for Better Performance
You can also use field symbols instead of using MODIFY, which provides better performance ?
FIELD-SYMBOLS: <fs_itab> TYPE [something].
LOOP AT itab ASSIGNING <fs_itab>.
SELECT SINGLE matnr INTO <fs_itab>-matnr
FROM zlldet WHERE palet = <fs_itab>-palet.
ENDLOOP.
Performance Optimization
To keep your code performance optimized, avoid using SELECT statements inside the loop. You should use range tables and use SELECT statement only before the loop ?
" Collect all palet values first
DATA: lt_palet TYPE TABLE OF [palet_type],
lt_zlldet TYPE TABLE OF zlldet.
LOOP AT itab INTO wa.
APPEND wa-palet TO lt_palet.
ENDLOOP.
" Single database access
SELECT matnr, palet FROM zlldet
INTO TABLE lt_zlldet
FOR ALL ENTRIES IN lt_palet
WHERE palet = lt_palet-table_line.
" Update internal table
LOOP AT itab INTO wa.
READ TABLE lt_zlldet INTO DATA(ls_zlldet) WITH KEY palet = wa-palet.
IF sy-subrc = 0.
wa-matnr = ls_zlldet-matnr.
MODIFY itab FROM wa.
ENDIF.
ENDLOOP.
Conclusion
Use MODIFY statements with work areas or field symbols to update internal table values efficiently. Always optimize database access by avoiding SELECT statements inside loops.
