在ABAP中从工作区修改DB表的最佳方法

在ABAP中从工作区修改DB表的最佳方法,abap,opensql,Abap,Opensql,我想找出从循环中的工作区修改DB表的最佳解决方案 有几种方法可以实现这一点,首先 LOOP AT itab INTO wa. wa-flag = 'X'. MODIFY zblabla FROM wa. ENDLOOP. 和字段符号 LOOP AT ITAB ASSIGNING <WA>. <WA>-flag = 'X'. ENDLOOP. 我不确定哪一种方法对不到50个条目来说更好。(我还想知道哪一个更好,有更多的条目。) 谢谢。首先使用字段符号修改循环中

我想找出从循环中的工作区修改DB表的最佳解决方案

有几种方法可以实现这一点,首先

LOOP AT itab INTO wa.
 wa-flag = 'X'.
 MODIFY zblabla FROM wa. 
ENDLOOP.
和字段符号

LOOP AT ITAB ASSIGNING <WA>.
  <WA>-flag = 'X'.
ENDLOOP.
我不确定哪一种方法对不到50个条目来说更好。(我还想知道哪一个更好,有更多的条目。)


谢谢。

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

LOOP AT ITAB ASSIGNING <WA>.
  <WA>-flag = 'X'.
ENDLOOP.
如果要使用Modify语句更新数据库

MODIFY DBTAB from ITAB.

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

LOOP AT ITAB ASSIGNING <WA>.
  <WA>-flag = 'X'.
ENDLOOP.
如果要使用Modify语句更新数据库

MODIFY DBTAB from ITAB.
您的第一个示例(在ITAB分配
时带有
循环的示例)实际上并没有更改数据库。它只改变内存中的数据。但是,您可以随后从表itab中更新zballa。
这会立即将整个表发送回数据库

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

另一个有时可以用来更新数据库内容而不将其加载到应用程序服务器的选项是
updatedatabase\u table SET field=value WHERE condition
命令

UPDATE zblabla SET flag = 'X'.
将数据库右侧表中的每一行的标志设置为“X”,而无需选择任何内容

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

更新。。。设置其中…
也应优先于
修改
单个条目,因为您拥有的表非常宽,并且您没有更改大部分,因为它允许您指定要更改的字段。当您不是通过
SELECT*
获取数据,而是只查询单个字段时,也必须使用它。

您的第一个示例(ITAB分配
循环的示例)实际上不会更改数据库。它只改变内存中的数据。但是,您可以随后从表itab中更新zballa。
这会立即将整个表发送回数据库

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

另一个有时可以用来更新数据库内容而不将其加载到应用程序服务器的选项是
updatedatabase\u table SET field=value WHERE condition
命令

UPDATE zblabla SET flag = 'X'.
将数据库右侧表中的每一行的标志设置为“X”,而无需选择任何内容

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


更新。。。设置其中…
也应优先于
修改
单个条目,因为您拥有的表非常宽,并且您没有更改大部分,因为它允许您指定要更改的字段。当您不是通过
SELECT*
获取数据,而是只查询单个字段时,也必须使用它。

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

wa_X-field1=“某物”。“其中wa_X与表的类型相同,例如具有相同的”字段。 wa_X-field2=“其他东西”。 从wa_X传输字段1字段2修改它_tableX,其中key1=wa_X-key1”(第一个键) key2=wa_X-key2。”(最后一个键) 从表it\u tableX中修改tableX。

这通常更好,因为它提高了性能,并确保只更改要更改的表的行


希望这有帮助。

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

wa_X-field1=“某物”。“其中wa_X与表的类型相同,例如具有相同的”字段。 wa_X-field2=“其他东西”。 从wa_X传输字段1字段2修改它_tableX,其中key1=wa_X-key1”(第一个键) key2=wa_X-key2。”(最后一个键) 从表it\u tableX中修改tableX。

这通常更好,因为它提高了性能,并确保只更改要更改的表的行


希望这有帮助。

您所说的是数据库表,但代码示例使用的是内部表。请指定是否要更改数据库或内存中的数据。Hey@Philipp。我想更改数据库表zballa上的数据。我的示例不是修改内部表。你可以再检查一下示例吗?字段符号示例不涉及数据库。是的,我不太确定字段符号:)我认为类型是ZBLALA。但这是不可能的,对吗?您正在谈论一个数据库表,但您的代码示例使用一个内部表。请指定是否要更改数据库或内存中的数据。Hey@Philipp。我想更改数据库表zballa上的数据。我的示例不是修改内部表。你可以再检查一下示例吗?字段符号示例不涉及数据库。是的,我不太确定字段符号:)我认为类型是ZBLALA。但这是不可能的,对吗?