我有一个ABAP内部表。结构化,有几列(例如25)。名称和类型无关紧要。该表可以变得非常大(例如5,000条记录)。
| A | B | ... |
| --- | --- | --- |
| 7 | X | ... |
| 2 | CCC | ... |
| 42 | DD | ... |
现在我想将其中一列(例如B)设置为特定的常量值(例如' Z')。
最简短,最快速,最省效的方法是什么?
我最好的猜测是LOOP REFERENCE INTO
。这非常有效,因为它可以就地更改表,而不会浪费新的内存。但它需要三个陈述,这让我想知道是否可以缩短它:
LOOP AT lt_table REFERENCE INTO DATA(ls_row).
ls_row->b = 'Z'.
ENDLOOP.
然后有VALUE
运算符将此减少为一个语句但效率不高,因为它创建了新的内存区域。它对于大量列也很长,因为它们必须逐个列出:
lt_table = VALUE #( FOR ls_row in lt_table ( a = ls_row-a
b = 'Z' ) ).
有更好的方法吗?
答案 0 :(得分:4)
以下代码一次设置所有行的PRICE = 0。从理论上讲,它应该是更新一列所有行的最快方法,因为它是一个语句。请注意,省略WHERE是不可能的,所以我使用一个简单的技巧来更新所有行。
DATA flights TYPE TABLE OF sflight.
DATA flight TYPE sflight.
SELECT * FROM sflight INTO TABLE flights.
flight-price = 0.
MODIFY flights FROM flight TRANSPORTING price WHERE price <> flight-price.
答案 1 :(得分:0)
如果您有宣布工作区......
workarea-field = 'Z'.
modify table from workarea transporting field where anything.
版: 在能够检查当前系统中的语法后,我可以证明(对我自己)必须添加WHERE子句或引发DUMP。 谢谢Sandra Rossi。