MODIFY TRANSPORTING

modify 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.



转载自:http://blog.sina.com.cn/s/blog_791a31b501016bsl.html

### 回答1: ABAP中的modify transporting是一种修改数据对象的方法,它可以在不影响其他数据对象的情况下修改指定的字段。使用该方法时,需要指定要修改的字段和其新值,并且需要使用TRANSPORTING选项来指定哪些字段需要被修改。这样可以避免不必要的数据更新,提高程序的效率和可维护性。 ### 回答2: ABAP Modify Transporting(修改传输)是SAP ABAP编程中的一个重要特性,它允许开发人员修改一个或多个字段的值而不改变其他字段的值,通常用于修改数据库中的数据。这种特性主要是通过使用MODIFY语句来实现的,该语句允许开发人员根据需要修改数据记录的特定字段。修改传输是一种灵活的方法,它可以使开发人员对数据进行更精细的控制,并且还可以以方便的方式将修改传输到其他环境中。 在修改传输过程中,通常需要指定哪些字段将被修改并传输,以及修改后的值。这些参数可以通过使用TRANSPORTING子句来完成。TRANSPORTING子句与ABAP MODIFY语句结合使用,可指定需要传输的字段,从而确保为其他环境中的记录进行任何更改。该子句还可用于指定在传输时需要保持不变的字段,以便确保这些字段的值在传输过程中不会被更改。 值得注意的是,如果开发人员修改数据记录并使用ABAP MODIFY语句进行传输时,确保事务处理可用。如果开发人员在传输时遇到错误或中断,或者未提交事务,就会导致数据丢失或不一致。因此,在使用ABAP MODIFY语句传输数据前,开发人员应该检查和确保事务处理是否正确。 总之,ABAP修改传输是一种使开发人员在SAP ABAP编程中更加灵活和精细地控制数据的方式。通过使用TRANSPORTING子句和事务处理,开发人员可以安全地将修改传输到其他环境中,并确保数据的精确性和一致性。 ### 回答3: ABAP是一种编程语言,用于SAP系统的开发。在ABAP中,MODIFY TRANSFERRING是一种修改操作,用于修改表格或内部表格中的数据。 当我们想要修改表格中的一行数据时,可以使用MODIFY语句。该语句需要两个参数:表格名和修改条件。例如,如果我们要将客户表格中ID为100的客户的电话号码修改为“123456789”,可以使用以下语句: MODIFY zcustomer TRANSPORTING telefone WHERE kunnr = '100'. 在这里,“zcustomer”是表格名,“telefone”是要修改的字段名,“kunnr = '100'”是修改条件。TRANSPORTING关键字告诉SAP系统,只修改指定的字段,而不是整行数据。 除了在表格中修改数据,我们还可以在内部表格中使用MODIFY操作。和表格一样,我们需要指定内部表格的名称以及修改条件。例如,如果我们要修改一个内部表格中的数据,可以使用以下语句: MODIFY itab TRANSPORTING field WHERE condition. 在这里,“itab”是内部表格的名称,“field”是要修改的字段名,“condition”是修改条件。TRANSPORTING关键字告诉系统,只修改指定的字段数据。 MODIFY操作对于修改SAP系统中的数据非常有用。它可以帮助我们快速而准确地修改表格或内部表格中的数据。但是,在使用MODIFY操作时需要谨慎,以避免意外修改数据带来的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值