ABAP 两个内表不同名称字段赋值的方法

*& 两个内表不同名称字段赋值的方法

*& 方法1:使用Loop循环手动赋值

*& 方法2:维护一个映射表,返回一个执行器,调用其execute方法

*& 方法3:CORRESPONDING #( )

复制代码
TYPES :BEGIN OF developer,              "内表1
         name           TYPE string,
         focus_language TYPE string,
         salary         TYPE i,
       END OF developer,

       BEGIN OF presale,               "内表2
         name              TYPE string,
         focus_area        TYPE string,
         salary_plus_bouns TYPE i,
       END OF presale.

DATA: developer_list TYPE TABLE OF developer WITH EMPTY KEY,
      presale_list1  TYPE TABLE OF presale WITH EMPTY KEY,
      presale_list2  TYPE TABLE OF presale WITH EMPTY KEY,
      presale_list3  TYPE TABLE OF presale WITH EMPTY KEY.

developer_list = VALUE #( ( name = 'AAA' focus_language = 'ZH' salary = 1 )
                          ( name = 'BBB' focus_language = 'EN' salary = 2 ) ).

"方法一:使用Loop循环手动赋值
LOOP AT developer_list ASSIGNING FIELD-SYMBOL(<temp1>).
  APPEND INITIAL LINE TO presale_list1 ASSIGNING FIELD-SYMBOL(<temp2>).
  <temp2>-name = <temp1>-name.
  <temp2>-focus_area = <temp1>-focus_language.
  <temp2>-salary_plus_bouns = <temp1>-salary.
ENDLOOP.

"方法2:维护一个映射表,返回一个执行器,调用其execute方法
*DATA(it_mapping) = VALUE cl_abap_corresponding=>mapping_table( ( level = 0 kind = 1 srcname = 'name' dstname = 'name' ) ).
DATA(lo_mapping_executor) = cl_abap_corresponding=>create(
  source      = developer_list
  destination = presale_list2
  mapping     = VALUE cl_abap_corresponding=>mapping_table(
    ( level = 0 kind = 1 srcname = 'name' dstname = 'name' )
    ( level = 0 kind = 1 srcname = 'focus_language' dstname = 'focus_area' )
    ( level = 0 kind = 1 srcname = 'salary' dstname = 'salary_plus_bouns' )
    )
  ).
lo_mapping_executor->execute( EXPORTING source = developer_list
                              CHANGING  destination = presale_list2 ).

"方法3:CORRESPONDING #( )
presale_list3 = CORRESPONDING #( developer_list MAPPING name               = name
                                                        focus_area         = focus_language
                                                        salary_plus_bouns  = salary         ).

推荐方法三,动态的话就用方法二。

相关推荐
<小智>4 小时前
及时做APP开发实战(十二)-LazyForEach懒加载优化实践
数据库·鸿蒙
我星期八休息4 小时前
网络编程—应用层HTTP协议
linux·运维·开发语言·前端·网络·网络协议·http
龙仔7254 小时前
人大金仓KingbaseES V8 手动单库备份&恢复操作笔记
数据库·笔记·oracle·人大金仓
一个天蝎座 白勺 程序猿4 小时前
从电网改造踩坑说起:深度拆解时序大模型TimechoAI的自主可控与安全合规底气
大数据·运维·服务器·大模型·timechoai
ShineWinsu4 小时前
对于Linux:UDPsocket编程基础的解析
linux·运维·网络协议·udp·ip·端口号·进程间通信
Spider Cat 蜘蛛猫6 小时前
Anthropic的skill-creator使用分享
运维·服务器
夏贰四6 小时前
数据库迁移怎样降低人力投入?数据库迁移怎么实现全量增量同步?
数据库·数据库迁移
汇智信科6 小时前
图谱、向量、关键词、SQL多路一体,FastKG垂域召回率100%拉满
网络·数据库·ai编程·汇智信科·hsim·fastclaw·汇智龙虾
剪刀石头布Cheers7 小时前
NDM浏览器插件无法连接后台的问题
windows·端口冲突·ndm
笨蛋不要掉眼泪8 小时前
MySQL架构揭秘:慢查询日志详解
数据库·mysql·架构