SAPSQL_ARRAY_INSERT_DUPREC将唯一记录插入空数据库表

2020-09-06 23:30发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


所以,我们有这样的代码:

zpre的
 DATA my_data类型哈希表,具有唯一的键关键字段。
 ...
 从ztable中删除。  " #EC CI_NOWHERE
 从表my_data中插入ztable。

在插入时,我们正在获取转储SAPSQL_ARRAY_INSERT_DUPREC。

数据库是Oracle。 ztable 在删除之前包含约200条记录, my_data 具有相似的大小。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


所以,我们有这样的代码:

zpre的
 DATA my_data类型哈希表,具有唯一的键关键字段。
 ...
 从ztable中删除。  " #EC CI_NOWHERE
 从表my_data中插入ztable。

在插入时,我们正在获取转储SAPSQL_ARRAY_INSERT_DUPREC。

数据库是Oracle。 ztable 在删除之前包含约200条记录, my_data 具有相似的大小。

付费偷看设置
发送
8条回答
昵称总是被占用
1楼 · 2020-09-07 00:01.采纳回答

转储的原因是表已缓冲,并且未在应用程序服务器之间同步。

感谢您的想法。

亦是此间程序员
2楼-- · 2020-09-06 23:58

我认为 您需要在删除后进行一次提交工作,因为否则,该命令仍位于报表和数据库之间。

如果您按照调试代码进行操作,则在删除后1-2秒停止,您仍然可以 错误?

huskylover
3楼-- · 2020-09-07 00:06

之间缺少提交

xfwsx85
4楼-- · 2020-09-07 00:16

我开始认为这是一个计时问题。 但是我们应该能够堆叠SQL-否则回滚机制将毫无意义-我们将无法做到这一点:

从ztable删除。  " #EC CI_NOWHERE
 如果sy-subrc是INITIAL。
   从表my_data接受重复行中插入ztable。
   如果sy-subrc是INITIAL。
     提交工作。
   其他。
     回滚工作。
   万一。
 其他。
   回滚工作。
 ENDIF。

也许我应该将数据库更新放入更新FM中。

三十六小时_GS
5楼-- · 2020-09-07 00:14

内部表的类型可能是具有唯一键的hash类型,但如果 数据库表键不是等效的。

悠然的二货
6楼-- · 2020-09-07 00:00

如果您确实想始终防止任何异常,则可能需要读取old_records_itab中的当前数据并将其与新记录进行匹配,以标识要创建的记录, 更新,删除或忽略,然后执行这3条语句。 许多更新FM都希望将内部表用作参数。

同时,您是否在每个abap sql语句之后检查sy-subrc和sy-dbcnt的值?

愤怒的猪头君
7楼-- · 2020-09-07 00:06

为什么在同一个数据库会话中需要提交? 如果为true,则以下代码将无用:

从ztable中删除。  " #EC CI_NOWHERE
 如果sy-subrc是INITIAL。
   从表my_data接受重复行中插入ztable。
   如果sy-subrc是INITIAL。
     提交工作。
   其他。
     回滚工作。
   万一。
 其他。
   回滚工作。
 ENDIF。

如果插入失败,我们将得到一个空表,这不是我们想要的。

一周热门 更多>