首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么IN UPDATE任务模块总是回滚DB?

为什么IN UPDATE任务模块总是回滚DB?
EN

Stack Overflow用户
提问于 2017-11-24 05:29:46
回答 1查看 5.9K关注 0票数 1

在更新实际DB表(使用SAP )时,IN UPDATE任务总是在实际表中进行回滚更改。

代码语言:javascript
复制
APPEND ls_emp TO lt_up_emp.
call function 'ZFM_UPDATE_EMPLOYEE' in update task
      tables
        lt_update = lt_up_emp.
COMMIT WORK.
if sy-subrc <> 0.
  ROLLBACK WORK.
endif.

下面是用于更新实际DB表的更新功能模块:

代码语言:javascript
复制
IF sy-subrc = 0.
  ""--- insert the data.
  IF lt_insert[] IS NOT INITIAL.
    INSERT ztadept FROM TABLE lt_insert.
    IF sy-subrc <> 0.
      RAISE not_inserted.
    ENDIF.
  ENDIF.
  "-- delete....
  IF lt_delete[] IS NOT INITIAL.
    DELETE ztadept FROM TABLE lt_delete.
    IF sy-subrc <> 0.
      RAISE not_deleted.
    ENDIF.
  ENDIF.
  "--Update.........
  IF lt_update[] IS NOT INITIAL.
    UPDATE ztadept FROM TABLE lt_update.
    IF sy-subrc <> 0.
      RAISE not_updated.
    ENDIF.
  ENDIF.
ENDIF.
CALL FUNCTION 'DEQUEUE_EZDEPT_LOC'.

为什么会有更新的回滚?

EN

回答 1

Stack Overflow用户

发布于 2019-05-02 20:18:08

投入工作的ABAP文档说:

如果未指定添加和等待,则语句COMMIT总是将sy-subrc设置为0。

因此,这意味着回滚更新的不是您的ROLLBACK WORK (您可以通过删除这个无用的行来清理代码)。

剩下的唯一可能性是:

  • 无论是更新功能模块有一个错误,不更新任何东西,
  • 或者更新函数模块抛出一个异常(RAISE)。

在第一种情况下,您可以通过激活“debug update”来调试函数模块,在第二种情况下,您可能会通过运行事务代码SM13来看到update函数模块的错误。

注意:在update任务中显式地删除锁是不常见的,因为通常锁是用作用域 '2‘(默认值)设置的,它会在更新任务结束时自动释放锁。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47466883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档