Abap 为什么在更新任务模块中总是回滚数据库?

Abap 为什么在更新任务模块中总是回滚数据库?,abap,opensql,function-module,Abap,Opensql,Function Module,在更新实际DB表(使用SAP LUW)时,IN UPDATE任务始终是回滚在实际表中所做的更改 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. 将ls\u emp附加到lt\u

在更新实际DB表(使用SAP LUW)时,IN UPDATE任务始终是回滚在实际表中所做的更改

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.
将ls\u emp附加到lt\u up\u emp。
在更新任务中调用函数“ZFM_UPDATE_EMPLOYEE”
桌子
lt\u update=lt\u up\u emp。
投入工作。
如果sy subrc为0。
回滚工作。
恩迪夫。
下面是我的更新功能模块,用于更新实际的DB表:

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'.
如果sy subrc=0。
“”-插入数据。
如果lt_insert[]不是首字母。
从表lt\U INSERT插入ztadept。
如果sy subrc为0。
未插入的提升。
恩迪夫。
恩迪夫。
“--删除。。。。
如果lt_delete[]不是首字母。
从表lt\U DELETE中删除ztadept。
如果sy subrc为0。
提升未被删除。
恩迪夫。
恩迪夫。
“--更新。。。。。。。。。
如果lt_update[]不是初始值。
从表lt\U UPDATE更新ztadept。
如果sy subrc为0。
提升未更新。
恩迪夫。
恩迪夫。
恩迪夫。
调用函数“DEQUEUE_EZDEPT_LOC”。
为什么要回滚更新?

的ABAP文档说明:

如果未指定加法和等待,则语句COMMIT WORK始终将sy subrc设置为0

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

剩下的唯一可能性是:

  • 要么更新功能模块有错误,不更新任何内容
  • 或者更新功能模块抛出异常(
    RAISE
在第一种情况下,您可以通过激活“调试更新”来调试功能模块,在第二种情况下,您可以通过运行事务代码SM13来查看更新功能模块的错误


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

首先:您是否检查了ST22的运行时错误?您至少有三点可以引发异常:
未更新
未删除
未插入
。其次:检查
sy subrc 0
没有任何意义,因为首先,您不要求任何
异常,其次,更新功能模块的执行在单独的过程(更新过程)中完成,并且您不会从中得到任何错误。如果更新任务中发生异常,那么它将在ST22中作为短转储结束。@Jagger我在这里没有得到任何运行时错误。但在调试时,它显示了表的更新。之后,它执行回滚。。。如果我试着投入工作并等待。我很难理解你到底想达到什么目标,你到底遇到了什么问题。你想澄清一下你的问题吗?@vwegert很抱歉回答得太晚了。。。。。实际上,我正在尝试实现SAP LUW,在更新功能模块(数据库LUW)中,将执行实际的更新、插入和删除操作,并更新数据库表中的记录。