这样做的效果是:当前会话进程所提交的数据库更新,与IN UPDATE TASK所提交的数据库更新,相互独立。带来的后果是,两部分数据更新也是相互独立的。
若IN UPDATE TASK更新失败,会话进程的更新并不受影响。
整体上看,这样实际产生了两个独立的LUW,一个是会话进程中OPEN SQL带来的,另一个是IN UPDATE TASK带来的。
在SAP的尺度代码中,会出现类似的场景,但不推荐这样用。因为,这样做的条件是,开发者或业务逻辑的负责人,要清晰地知道其影响与后果,一次业务操作后,可能引发部分操作成功,部分操作失败。
而在绝大多数场景中,我们最期望的效果是,程序运行可以简单直接,更新全部成功或全部失败。
2.2 测试2 - COMMIT WORK AND WAIT的效果
我们知道COMMIT WORK AND WAIT的效果是同步更新,也即触发新的更新进程,但要等到更新进程执行竣事后,会话进程才会继续。
若在测试1的场景中,使用COMMIT WORK AND WAIT替代COMMIT WORK,会有什么影响呢?
START-OF-SELECTION.
FINAL(ls_spfli) = VALUE spfli( carrid = 'LH'
connid = '123' ).
INSERT INTO spfli VALUES @ls_spfli.
CALL FUNCTION 'ZGG_UPDATE_MODULE_1' IN UPDATE TASK.
BREAK-POINT.
COMMIT WORK AND WAIT. " <<-------what will happen?
BREAK-POINT.
复制代码
其运行效果如下:
可见COMMIT WORK AND WAIT的效果和COMMIT WORK的效果是类似的。COMMIT WORK AND WAIT仍会触发新的更新进程,并且独立于当前的会话进程,会话进程固然被WAIT壅闭,但会话进程中对于数据库的提交并不受影响。
2.3 测试3 - SET UPDATE TASK LOCAL 的效果