修改数据库的 db_table 类型 table

Modify a db_table type table of a db

我用 ID、名字、姓氏创建了一个数据库 table。 我创建了以下程序:

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'.

现在我想修改我的数据库 table 索引 2 中的行。

所以我正在尝试做类似的事情:

modify ztabletest from table db_table values modifiedLine at index 2.

不明白修改逻辑

插入我刚刚做的事情:

insert INTO ztabletest VALUES modifiedLine.

所以这里的逻辑很简单,因为我在 table 中添加了值。 你能解释一下修改一行的逻辑吗?

数据库table 没有“索引”。 table 行的顺序未指定。当您执行 SELECT 而没有 ORDER BY 时,数据库可以按照您感觉的任何顺序为您提供该行。大多数 SQL 数据库往往总是给你相同的顺序,但那是为了 他们 的方便,而不是为了你的。尤其是SAP HANA在这方面往往很喜怒无常。

但是数据库 table 确实有一个主键。主键可以被认为是每个 table 行的唯一标识符。所以当你把主键设为一个数字时,你可以很好地模拟一个索引。我假设这是您的数据库列中字段“ID”的目的,因此您在定义数据库时将其标记为“键”。


INSERT 当不存在具有相同键值的行时添加一个新行。当已经有一个时,它会失败并显示 sy-subrc = 4.

modifiedLine-id = 2.
INSERT ztabletest FROM modifiedLine.

UPDATE 更改具有相同键值的现有 table 行。当 table 中不存在具有这些主键值的行时,它会失败并显示 sy-subrc = 4.

modifiedLine-id = 2.
UPDATE ztabletest FROM modifiedLine.

或者更“传统的 SQL” 语法 SETWHERE:

UPDATE ztabletest 
  SET firstname = 'hey'
      lastname = 'test'
  WHERE id = 2

MODIFY 是 INSERT 和 UPDATE 的组合(也称为“upsert”)。它检查该行是否已经存在。当它在那里时,它会修改该行。如果不是,则将其插入。

modifiedLine-id = 2.
MODIFY ztabletest FROM modifiedLine.

这基本上是一个 shorthand 用于:

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