ABAP MODIFY
MODIFY TRANSPORTINGmodify table itab from wa Transporting f1 f2 ...
用于指出表内itab 中符合工作区wa关关字的一关关的 条f1 ,f2 ,...等字段被会wa中的关修改掉。
先看下面的段程序两, 关关一关关行的更快一些你哪个?
数据定关和提取:
DATA: BEGIN OF it_marc OCCURS 0,matnr LIKE marc-matnr,
werks LIKE marc-werks,
dispo LIKE marc-dispo,
plifz LIKE marc-plifz,
END OF it_marc.
select matnr werks
into table it_marc
from marc.
程序一:
LOOP AT it_marc.
it_marc-dispo = 'G00'.
it_marc-plifz = 5.
MODIFY it_marc.
ENDLOOP.
程序二:
LOOP AT it_marc.
it_marc-dispo = 'G00'.
it_marc-plifz = 5.
MODIFY it_marc TRANSPORTING dispo plifz.
ENDLOOP.
两个程序唯一的不同就是MODIFY关句的使用,程序二使用了TRANSPORTING
子句,
更新部表关关关关更新内DISPO,PLIFZ字段两个.
我的直关是程序二关关行的快一些运,关竟更新的据少了数.
但是行关果出乎意料运, 10次行关关如下运:
程序一 程序二
122,167 128,485
120,686 128,306
120,732 128,273
120,737 128,273
120,725 128,278
120,418 128,323
120,648 128,267
121,187 128,246
120,741 128,023
120,647 128,012
很明关, 程序一行要比程序二快运, 大快概6%, 具原因是什关体呢? 我关在想不明白.
在SAP关于官方文中档,关于使用TRANSPORTING子句有关关的解关:With the MODIFY variant "MODIFY itab ... TRANSPORTING f1 f2 ..."
the task of updating a line of an internal table can be accelerated.
The longer the table line is, the larger the speed-up is.
The effect increases for tables with complex structured line types.
从来上面的解关看,部表的关越大内构, 使用TRANSPORTING子句越有效, 于是我修改IT_MARC的定关如下:
DATA: it_marc LIKE TABLE OF marc WITH HEADER LINE.
重新行运, 10次行关关如下运:
程序一 程序二
341,469 311,265
340,983 311,268
341,285 311,432
341,364 311,395
341,630 311,928
341,324 311,358
341,280 311,439
341,328 311,247
341,577 311,269
341,312 311,227
关关的关程序二比程序一更有效率,大快概9%
当然,大多情下数况,我关使用的部表不像内会MARC关关大, 看有必要关求一平来个
衡点.
我做了一下关关,逐步增大部表的关内构,部表的大小关当内150字关的关候个, 程序一和程序二的行关关基本相等运.
其关,关于上面的功能,使用FIELD-SYMBOLS修改的速度最快,速度大快一倍概,下面是一示例个:
FIELD-SYMBOLS: LIKE LINE OF it_marc.LOOP AT it_marc ASSIGNING .-dispo = 'G00'.
-plifz = 5.
ENDLOOP.