隐式提交的引申之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、结语
博客频遭盗窃,请移步公众号“斌将军”,输入关键字“事务”查看