ABAP 语句 COMMIT WORK 提交在 SAP LUW 期间完成的更改。它不能与 DB-Commit 混淆。

首先明确什么是 SAP LUW(Logic Unit of Work)?

下文所说的​​工作流程​​​,​​工作进程​​​,都是指 SAP ABAP 培训教材里的 ​​Work Process​​.

关于什么是 ABAP Work Process,请参阅我的文章:

SAP LUW 是指 ABAP 程序中的逻辑单元,其行为类似于数据库 LUW;换句话说,一个 SAP LUW 在结束时会产生一致的数据库状态。虽然 SAP LUW 可能会跨越多个工作流程更改,但数据库更改是在单个数据库 LUW 中执行的。这是通过 ​​bundling​​​ 完成的。在这种情况下,不会直接执行所需的数据库更改。相反,它们是在各种工作流程更改过程中收集的,业务流程需要修改或者创建,删除的数据,保存到 ABAP 内表里,然后在 SAP LUW 的最终工作流程中,作为数据库中的 ​​bundling 任务​​执行。这意味着只有传入到 ABAP update function module 的内表数据施加到数据库的更改,受数据库的 LUW 机制的约束。

ABAP 语言提供了几种在工作流程中捆绑数据库更改的机制。最重要的是捆绑在更新功能模块,即所谓的 UPDATE FUNCTION MODULE 中。您可以通过在 UPDATE TASK 中调用这些功能模块来收集您的变更请求, 真正的数据库层面的修改,发生在 COMMIT WORK 语句调用之后。

一个 AS ABAP 具有一个或多个应用程序服务器,而这些应用程序服务器又具有工作流程。当前处于活动状态的每个 ABAP 程序都需要一个工作进程,并且每个工作进程都以用户身份登录到数据库系统。一个工作进程不能并行执行多个数据库 LUW,相反,多个工作进程不能影响单个数据库 LUW。然而,一个 ABAP 程序在其整个运行过程中经常与多个工作进程相关联。在程序处于非活动状态的所有时间(例如,因为它正在等待用户进行输入,或者它作为客户端正在等待服务器上的任务完成),它会释放当前被占用的工作进程,避免其长时间被占用但却不执行任何任务。因此,当其对程序的责任发生变化时,工作进程必须始终结束 LUW 并执行隐式数据库提交。