ABAP开发示例:使用 ASSIGN加速 LOOP循环

根据下面的程序的运行对比,发现使用ASSIGN 的程序比另一个快了大约 25%。

使用 "LOOP AT itab ASSIGNING ." 而不是使用工作区(无论是显式的还是通过表头行的),可以避免数据在工作区的传输。字段符号是一个指针,指向(!)表中的行,所以可以直接修改表中的行而不需要使用 MODIFY ,从而避免另一次数据传输。示例程序如下:

sql 复制代码
Report Y1.
TYPES: BEGIN OF rec_type,
                count TYPE i,
                string(1024) TYPE c,
           END OF rec_type.
TYPES tab_type TYPE rec_type OCCURS 0.
DATA: itab TYPE tab_type,
          wa TYPE rec_type.
DO 100000 TIMES.
      APPEND wa TO itab.
ENDDO.
LOOP AT itab INTO wa.
         wa-count = sy-tabix.
         wa-string = 'x'.
         MODIFY itab FROM wa. "修改内表
ENDLOOP.
使用 assign 的代码:
Report Y2.
TYPES: BEGIN OF rec_type,
                 count TYPE i,
                 string(1024) TYPE c,
          END OF rec_type.
TYPES tab_type TYPE rec_type OCCURS 0.
DATA: itab TYPE tab_type,
          wa TYPE rec_type.
FIELD-SYMBOLS <fs> TYPE rec_type.
DO 100000 TIMES.
       APPEND wa TO itab.
ENDDO.
LOOP AT itab ASSIGNING. " pointer
     <fs>-count = sy-tabix. " 修改内表 itab
    <fs>-string = 'x'. " 不需要用 MODIFY

ENDLOOP.
相关推荐
晴天¥10 分钟前
Oracle中的概要文件
运维·数据库·oracle
杭州泽沃电子科技有限公司12 分钟前
变压器安全,在线监测如何实现?
运维·在线监测·智能运维
0思必得025 分钟前
[Web自动化] Requests模块基本使用
运维·前端·python·自动化·html·web自动化
mr_orange_klj1 小时前
关于负载均衡的负载均衡的AI问答(豆包)
运维·负载均衡
自己的九又四分之三站台1 小时前
docker安装pgvector、age和postgis
运维·docker·容器
忧郁蓝调261 小时前
Redis不停机数据迁移:基于 redis-shake 的跨实例 / 跨集群同步方案
运维·数据库·redis·阿里云·缓存·云原生·paas
吃螺丝粉1 小时前
zookeeper权限设置
linux·运维·服务器
代码游侠1 小时前
学习笔记——HTML网页开发基础
运维·服务器·开发语言·笔记·学习·html
乾元1 小时前
数据中心流量工程(TE)优化:当 AI 成为解决“维度诅咒”的唯一操纵杆
运维·服务器·网络·人工智能·架构·自动化
代码游侠1 小时前
应用——基于C语言实现的简易Web服务器开发
运维·服务器·c语言·开发语言·笔记·测试工具