隐式提交的引申之DB/SAP LUW

1、写在前面

之前发表过《聊聊更新表时的隐式提交》一文,向大家介绍隐式提交,对于数据库操作的作用。

有粉丝看过后,提出了自己的疑问:

首先解释一下,该粉丝大致的问题和代码含义为:

在创建销售订单增强中,当因为错误需要拦截单据创建时,需要用commit work记录日志数据到自建表。而由于使用了commit work,导致更新自建表的同时,将生成单据的事务也提交,导致拦截失败,单据一同被创建出来。

最终采用了在增强中调用CALL...STARTING NEW TASK 方式,将更新自建表以及commit work放在函数中,这样自建表更新成功,单据也没有受到CALL...STARTING NEW TASK 中commit work的影响,成功被拦截了。

所以对CALL...STARTING NEW TASK执行后,对主程序进行隐式提交有疑问,隐式提交就不会将单据创建出来吗?

正好借此机会,解释这位粉丝疑问的同时,向大家介绍DB LUW和SAP LUW。

2、DB LUW

2.1、什么是DB LUW?

DB LUW(Database Logical Unit of Work):又称数据库逻辑单元。为了保证一系列数据库操作,要么同时成功提交,要么同时失败回滚,就引入了DB LUW,DB LUW 是数据库管理系统(DBMS)层面上的一个概念。

如下图:

数据库从左侧开始(代表一个DB LUW开始),经过INSERT、UPDATE、DELETE多次操作,如果其中任何一项操作出现问题,则对DB LUW开始以来的所有操作进行回滚,使数据库回滚到最左侧(最左侧,代表初始数据)。如果没有错误,执行到commit,则将这一个DB LUW中的一系列操作更新到数据库(最右侧,代表最终数据),以此来保证数据库数据的一致性。

代码举例

2.2、DB LUW的提交和回滚

2.3、DB LUW的生命周期

3、SAP LUW

3.1、什么是SAP LUW?

3.2、实现SAP LUW

3.2.1、使用更新功能模块进行捆绑

3.2.2、使用子例程捆绑

3.2.3、两者的区别

3.3、代码验证DB 和 SAP LUW区别

3.3.1、单纯DB LUW实现

3.3.2、SAP LUW实现

4、结语

博客频遭盗窃,请移步公众号“斌将军”,输入关键字“事务”查看

 

posted @ 2024-03-13 19:29  斌将军  阅读(14)  评论(0编辑  收藏  举报