1、背景
今天在跟踪采购信息记录创建接口时,发现一个程序BUG,多行阶梯价变成了重复(首行)的数据,跟踪代码定位问题在以下语句附近

2、实测
编写Demo代码如下:
REPORT YZ_TEMP_DEMO.
DATA: BEGIN OF GS_STRUC,
ID TYPE I,
VALUE TYPE P,
END OF GS_STRUC.
DATA: GT_STRUC LIKE TABLE OF GS_STRUC.
GS_STRUC-ID = 1.
GS_STRUC-VALUE = 10.
APPEND GS_STRUC TO GT_STRUC.
GS_STRUC-ID = 2.
GS_STRUC-VALUE = 100.
APPEND GS_STRUC TO GT_STRUC.
LOOP AT GT_STRUC ASSIGNING FIELD-SYMBOL(<FS>).
ENDLOOP.
CL_DEMO_OUTPUT=>DISPLAY( GT_STRUC ). " 值未改变
LOOP AT GT_STRUC ASSIGNING <FS>.
ENDLOOP.
CL_DEMO_OUTPUT=>DISPLAY( GT_STRUC ). " 值未改变
LOOP AT GT_STRUC INTO <FS>.
ENDLOOP.
CL_DEMO_OUTPUT=>DISPLAY( GT_STRUC ). " 值改变,全部变成了第一行的值
实测结果依次如下:



3、区别
(1)通过实测,可以发现,Loop…Assigning与Loop…Into FIELD-SYMBOL是完全不同的;
(2)Loop…Into wa 与 Loop…Assigning FIELD-SYMBOL,可以实现相同作用,但后者效率更高(不存在往工作区转移数据)。
LOOP AT itab INTO wa_tab.
wa_tab-fld1 = ’X’.
MODIFY itab FROM wa_tab. " 需要MODIFY更新回去
ENDLOOP.
LOOP AT itab ASSIGNING <fs>.
<fs>-fld1 = ’X’. " 可以直接更新
ENDLOOP.
本文通过对比Loop...Assigning与Loop...Into两种循环方式的特点及效率差异,解析了ABAP编程中不同循环语句对数据处理的影响。实测结果显示,Loop...Into会将表中的所有行替换为首次循环行的数据。
806

被折叠的 条评论
为什么被折叠?



