Abap 修改数据库的db_表类型表
我创建了一个ID为firstname的数据库表。 我创建了以下程序: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
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文档及其示例:。