Abap 修改数据库的db_表类型表

Abap 修改数据库的db_表类型表,abap,Abap,我创建了一个ID为firstname的数据库表。 我创建了以下程序: data: db_table type table of ztabletest. "Create my db data select * from z6148tabletest into table db_table. "Fill my db data data: modifiedLine type z6148tabletest. "Create my new line modifiedLine

我创建了一个ID为firstname的数据库表。 我创建了以下程序:

data: db_table type table of ztabletest. "Create my db data
select * from z6148tabletest into table db_table. "Fill my db data
data: modifiedLine type z6148tabletest. "Create my new line

modifiedLine-firstname = 'hey'.
modifiedLine-lastname = 'test'.
现在我想修改db表索引2中的行

所以我试着做一些类似的事情:

modify ztabletest from table db_table values modifiedLine at index 2.
我不明白修改的逻辑

要插入我刚刚执行的操作:

insert INTO ztabletest VALUES modifiedLine.
这里的逻辑很简单,因为我在表中添加了值。 你能解释一下修改行的逻辑吗?

数据库表没有“索引”。未指定表行的顺序。如果执行
选择
而不使用
排序依据
,则数据库可以按任何顺序为您提供行。大多数SQL数据库总是给您相同的顺序,但这是为了它们的方便,而不是为了您的方便。尤其是SAP HANA在这方面往往非常喜怒无常

但数据库表所具有的是主键。主键可以看作是每个表行的唯一标识符。因此,当您将主键设为数字时,可以很好地模拟索引。我假设这是数据库列中“ID”字段的用途,因此在定义数据库时将其标记为“key”


当不存在具有相同键值的行时,添加新行。当已经有一个时,它将失败,sy subrc=4

modifiedLine-id = 2.
INSERT ztabletest FROM modifiedLine.
modifiedLine-id = 2.
UPDATE ztabletest FROM modifiedLine.
使用相同的键值更改现有表行。当表中不存在具有这些主键值的行时,它将失败,sy subrc=4

modifiedLine-id = 2.
INSERT ztabletest FROM modifiedLine.
modifiedLine-id = 2.
UPDATE ztabletest FROM modifiedLine.
或者使用
SET
WHERE
,使用更像“传统SQL”的语法:

UPDATE ztabletest 
  SET firstname = 'hey'
      lastname = 'test'
  WHERE id = 2
是插入和更新的组合(也称为“upsert”)。它检查线路是否已经存在。当它在那里时,它会修改线条。如果不是,则插入它

modifiedLine-id = 2.
MODIFY ztabletest FROM modifiedLine.
这基本上是以下内容的简写:

modifiedLine-id = 2.
UPDATE ztabletest FROM modifiedLine.
IF sy-subrc = 4.
    INSERT ztabletest FROM modifiedLine.
ENDIF.

阅读ABAP文档及其示例:。