0

我想找出从工作区循环修改数据库表的最佳解决方案。

首先,有几种方法可以实现这一目标;

LOOP AT itab INTO wa.
 wa-flag = 'X'.
 MODIFY zblabla FROM wa. 
ENDLOOP.

和字段符号;

LOOP AT ITAB ASSIGNING <WA>.
  <WA>-flag = 'X'.
ENDLOOP.

或者,我应该从整个内部表中修改 DBtable 吗?

modify zblabla from it. 

对于少于 50 个条目,我不确定哪一个是更好的方法。(我也想知道哪一个更好,条目更多。)

谢谢。

4

3 回答 3

4

您的第一个示例(带有 的示例LOOP AT ITAB ASSIGNING <WA>)实际上并未更改数据库。它只改变内存中的数据。但是,您之后可以UPDATE zblabla FROM TABLE itab.立即将整个表发送回数据库。

当表格的每一行都改变时,这比单独改变每一行要快得多。但是当表格中只有几行实际上不同时,这是非常浪费的,并且使用 . 仅更新实际更改的行可能会更快MODIFY

有时可用于更新数据库内容而不将其加载到应用程序服务器中的另一个选项是UPDATE database_table SET field = value WHERE condition命令。

UPDATE zblabla SET flag = 'X'.

无需SELECT任何操作,就可以将数据库中表中每一行的标志设置为“X”。

在您的示例中,这将是迄今为止最快的方法,但在现实世界中,您很少遇到如此微不足道的问题。

UPDATE ... SET ... WHERE ...MODIFY当您拥有的表格非常宽并且您没有更改大部分表格时,也应该优先于单个条目,因为它允许您指定要更改的字段。当您没有通过 a 获取数据SELECT *但仅查询单个字段时,您也必须使用它。

于 2015-07-24T12:05:55.913 回答
1

首先使用字段符号修改循环中的数据

LOOP AT ITAB ASSIGNING <WA>.
  <WA>-flag = 'X'.
ENDLOOP.

我建议您使用 UPDATE 而不是 MODIFY。

UPDATE DBTAB from TABLE ITAB.

如果要使用 Modify 语句来更新数据库。

MODIFY DBTAB from ITAB.
于 2015-07-24T11:33:18.057 回答
0

使用传输和 where 子句修改内部表以指定将使用表的整个键更改哪些字段,然后使用内部表更改透明表(数据库表)。

wa_X-field1 = "something". "where wa_X is of the same type of the table e.g. has the same "fields. wa_X-field2 = "other something". MODIFY it_tableX FROM wa_X TRANSPORTING field1 field2 WHERE key1 = wa_X-key1 "(first key) key2 = wa_X-key2. "(last key) MODIFY tableX FROM TABLE it_tableX.

这通常会更好,因为它可以提高性能并确保您只更改要更改的表格行。

希望这可以帮助。

于 2018-05-04T18:13:25.480 回答