更新内部 table 中列的最短表示法是什么?
What is the shortest notation for updating a column in an internal table?
我有一个内部 ABAP table。结构化,有多个列(例如 25)。名称和类型无关紧要。 table 可以变得相当大(例如 5,000 条记录)。
| A | B | ... |
| --- | --- | --- |
| 7 | X | ... |
| 2 | CCC | ... |
| 42 | DD | ... |
现在我想将其中一列(例如 B)设置为特定的常量值(例如 'Z')。
执行此操作的最短、最快和最节省内存的方法是什么?
我最好的猜测是 LOOP REFERENCE INTO
。这是非常有效的,因为它就地更改了 table,而不会浪费新的内存。但是它占用了三个语句,这让我想知道是否可以缩短:
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' ) ).
有没有更好的方法?
如果您声明了工作区...
workarea-field = 'Z'.
modify table from workarea transporting field where anything.
版本:
在能够检查我当前系统中的语法之后,我可以(对自己)证明必须添加 WHERE 子句或引发 DUMP。
谢谢桑德拉·罗西。
以下代码一次设置所有行的 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.
我有一个内部 ABAP table。结构化,有多个列(例如 25)。名称和类型无关紧要。 table 可以变得相当大(例如 5,000 条记录)。
| A | B | ... |
| --- | --- | --- |
| 7 | X | ... |
| 2 | CCC | ... |
| 42 | DD | ... |
现在我想将其中一列(例如 B)设置为特定的常量值(例如 'Z')。
执行此操作的最短、最快和最节省内存的方法是什么?
我最好的猜测是 LOOP REFERENCE INTO
。这是非常有效的,因为它就地更改了 table,而不会浪费新的内存。但是它占用了三个语句,这让我想知道是否可以缩短:
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' ) ).
有没有更好的方法?
如果您声明了工作区...
workarea-field = 'Z'.
modify table from workarea transporting field where anything.
版本: 在能够检查我当前系统中的语法之后,我可以(对自己)证明必须添加 WHERE 子句或引发 DUMP。 谢谢桑德拉·罗西。
以下代码一次设置所有行的 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.