如何使用ABAP 750/752新语法实现内表间字段快速填充?
ABAP 7.50/7.52 简化提取内表字段实现方案
完全可以通过新语法实现相同功能,代码行数大幅缩短,无需显式编写循环逻辑。
原有实现逻辑回顾
旧版ABAP通过显式循环+追加的方式提取字段到目标内表,代码如下:
DATA: it_source_table type table of mara, et_result_table type table of matnr. loop at it_source_table into data(ls_source_table). append ls_source_table-matnr to et_result_table. endloop.
新语法实现方式
所有实现方式的性能和传统LOOP写法基本一致,ABAP底层会做同等优化,不会有额外性能损耗。
方式1:VALUE + FOR 迭代构造(最通用,适配所有场景)
该语法从ABAP 7.40版本开始支持,7.50/7.52完全兼容:
- 直接覆盖目标表原有内容:
et_result_table = VALUE #( FOR ls_source IN it_source_table ( ls_source-matnr ) ).
- 保留目标表原有内容,等价于原逻辑的追加效果,需加
BASE关键字:
et_result_table = VALUE #( BASE et_result_table FOR ls_source IN it_source_table ( ls_source-matnr ) ).
方式2:CORRESPONDING 映射构造(适合多字段批量匹配场景)
如果源表和目标表的字段名一致,可以直接用CORRESPONDING语法实现,该写法更适合多字段同步映射的场景:
et_result_table = CORRESPONDING #( it_source_table ).
如果字段名不一致,可以显式加MAPPING指定映射关系,示例如下:
" 示例场景:目标表字段名为material_no,源表字段为matnr et_result_table = CORRESPONDING #( it_source_table MAPPING material_no = matnr ).
方式3:ABAP SQL 内表查询
7.52版本完全支持直接查询内表,写法更贴近SQL使用习惯:
- 直接覆盖目标表原有内容:
SELECT matnr FROM TABLE @it_source_table INTO TABLE @et_result_table.
- 追加内容到目标表:
SELECT matnr FROM TABLE @it_source_table APPENDING TABLE @et_result_table.
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

