如何防止两个数据库更新不一致的问题?

2020-09-16 01:25发布

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

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


你好社区,

是否有可能防止两个数据库更新不一致?

我正在开发一个程序,该程序想同时更新两个加载项表,但是有时仅成功地提交了头表(zheader),没有对项表(zitem)进行更新,但没有任何异常。

以下代码有问题吗? 还是我需要在"更新任务更新"中使用以下更新?

从表it_zheader修改zheader。
 如果sy-subrc = 0。
   l_flag ='X'。
 其他。
   l_flag =''。
 万一。


 从表it_zitem修改zitem。
 如果sy-subrc = 0并且l_flag ='X'。
   l_flag ='X'。
 其他。
   l_flag =''。
 万一。

 如果l_flag ='X'。
    提交工作并等待。
 其他。
   回滚工作。
   消息s398与"更新表成功!"显示为"我"。
 万一。
 

谢谢。

关于

妮可

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

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


你好社区,

是否有可能防止两个数据库更新不一致?

我正在开发一个程序,该程序想同时更新两个加载项表,但是有时仅成功地提交了头表(zheader),没有对项表(zitem)进行更新,但没有任何异常。

以下代码有问题吗? 还是我需要在"更新任务更新"中使用以下更新?

从表it_zheader修改zheader。
 如果sy-subrc = 0。
   l_flag ='X'。
 其他。
   l_flag =''。
 万一。


 从表it_zitem修改zitem。
 如果sy-subrc = 0并且l_flag ='X'。
   l_flag ='X'。
 其他。
   l_flag =''。
 万一。

 如果l_flag ='X'。
    提交工作并等待。
 其他。
   回滚工作。
   消息s398与"更新表成功!"显示为"我"。
 万一。
 

谢谢。

关于

妮可

付费偷看设置
发送
4条回答
callcenter油条
1楼-- · 2020-09-16 02:03
  • 请在成功的IF案例中移动成功消息...
  • 从概念上来说,由于MODIFY不会对重复的主键产生错误,因此您应该寻找辅助唯一索引和锁定记录(在数据库级别,为防止这种情况您编写了什么代码),甚至在系统或数据库日志中
me_for_i
2楼-- · 2020-09-16 02:18

以后发布代码时,请在编辑器中使用"代码"按钮。 这次我为您做了。

您的编码不正确。 首先,l_flag不是变量的有意义的名称。 怎么样的previous_modify_successful,并使用提供的abap_true和abap_false代替任意的''和'X'。 但是结构也不好。 当您尝试更新zitem时,即使zheader更新已经失败。

从表it_zheader修改zheader。
 如果sy-subrc = 0。
   从表it_zitem修改zitem。
   如果sy-subrc = 0
     提交工作并等待。
     db_modify_was_successful = abap_true。
   万一。
 万一。
 如果db_modify_was_successful = abap_false。
   回滚工作。
   消息s398与"更新表成功!"显示为"我"。
 ENDIF 

您知道it_item不为空吗? 您能否重现观察到的问题? 您是否尝试过调试?

bbpeas
3楼-- · 2020-09-16 02:10

尊敬的Mattehew,
感谢您的好评。 实际上,我们生产中的结构不是这样(这只是一个示例),我们具有以前形式的逻辑来检查it_item是否为空,并且该程序已经在生产环境中运行了一段时间。 不知道为什么有时项目表更新失败(当时我们跟踪的项目结构不为空,没有任何异常或数据库锁定发生)。

clever101
4楼-- · 2020-09-16 02:09
  • 是的,每个更新此表的程序都应使用相同的队列(例如E_TABLE)
  • COMMIT/ROLLBACK WORK将删除该锁,因此不需要显式调用DEQUEUE。

一周热门 更多>