ABAP-关于COMMIT WORK 和COMMIT WORK AND WAIT
首先说明一点:更新是异步的,更新是由SAP中UPD1和UPD2两个进程执行的,关于这两个进程各负责什么再说明一下:
UPD1先执行,主要是用于数据库表的更新,比如说写表
UPD2后执行,主要是用于一些数据的收集统计等的更新,比如说为BW收集一下数据等等
同时这个是可以在SM13看到的,如果看到日志中UPD1成功,UPD2失败,如有BW的取数,那肯定会丢数据的。
所以说COMMIT WORK是异步的,为了使其同步,所有就有了COMMIT WORK AND WAIT.
对于COMMIT WORK AND WAIT 来说,是可以判断是否更新成功的,SY-SUBRC NE 0就是有问题的。
上面是最简单的区别,再有:
由于系统中COMMIT WORK的数量是有限的,比如说我们系统是4000个,同时只能提交4000个更新进程,对于COMMIT WORK来说,执行完就释放了,可以为后面的COMMIT WLRK继续使用;而对于COMMIT WORK AND WAIT是要执行完才释放的,所以对于没有必要同步更新的,也尽快使用异步,使得资源得到释放。
有时,在继 续处理前需 要确认对数 据库表所作 的更改。另 一方面,在 永久存储之 前可能需要 取消一些对 数据库表所作的更改。要确认对数 据库表的更 改,请使用 COMMIT WORK 语句。要在 永久存储之 前取消一些 更改,请使 用 ROLLBACK WORK 语句。这些语句在 对话编程( 即 SAP 事务、数据 库事务、打 开或关闭屏 幕等等,有 关对话编程 的概述,参 见编写 ABAP/4 事务)中起着 十分重要的 作用。在本 主题中,您 将了解到如 何在 ABAP/4 报表中使用 COMMIT WORK 和 ROLLBACK WORK( 参见编写 ABAP/4 报表)。
在 ABAP/4 报表中,可 能有几个作 业联系在一 起形成作业 的逻辑单元 (LUW) 。通常,可 能要处理 LUW 中的所有动作,或什么 也不要处理 。假设 LUW 中包含了将 五行插入到 数据库表中 的进程。如 果事务成功 ,所有五行 都将存储在 数据库表中 (这包含一 个更新请求 和一个数据 库事务)。 在显示新屏 幕之前,数 据库事务将 自动结束( ABAP/4 报表的结束 )。在 ABAP/4 报表中不能 以任何方式 影响该进程,如果要保证 数据库中当 前所作的更 改立即被确 认,那么, 就必须使用 COMMIT WORK 语句结束 LUW。COMMIT WORK 在程序代码 中标记了 LUW 结束并启动 更新任务( 参见 COMMIT WORK 处理 )。在 COMMIT WORK 语句以后, 对数据库所 作的所有更 改都不能再 取消。
但是,如果 在 LUW 中出现了错 误,就必须 取消已经执 行的部分。 这意味着当 前没有任何 插入的行能 永久地保存 在数据库中 。要撤销当 前 LUW 对数据库的 更改,请使 用 ROLLBACK WORK, 它将取消前 一次数据库 提交后的所 有更改。
要确认对数 据库表的更 改并使它们 不能再取消 ,请按如下 格式使用 COMMIT WORK 语句:
语法
COMMIT WORK [AND WAIT].
如果使用 AND WAIT 选项,那么 在程序继续 执行以前, 它要等到更 新任务的结 束。如果更 新是成功的 ,SY-SUBRC
就设置为 0。如果 SY-SUBRC 返回一个非 零值,就没 有成功的存 储所作的更 改。
要在保存之 前取消对数 据库表所作 的更改,请 按下列形式 使用 ROLLBACK WORK 语句:
语法
ROLLBACK WORK.
如果对更改 的取消是成 功的,SY-SUBRC 就设置为 0。如果 SY-SUBRC 返回一个非 零值,就没 有成功地取 消所作的更 改。
使用 COMMIT WORK 和 ROLLBACK WORK 语句的结果 是将丢失所 有的数据库 光标。因此 ,在 SELECT 循环中或在 处理 SQL 语句之前不 允许使用这 些语句。
关于 COMMIT WORK 和 ROLLBACK WORK 的详细信息 ,请参考关 键字文档。
TABLES SPFLI.
DATA FLAG.
SPFLI-CARRID = 'UA'. SPFLI-CONNID = ''.
SPFLI-CITYFROM = ............
INSERT SPFLI.
IF SY-SUBRC <> .
FLAG = 'X'.
ENDIF.
SPFLI-CARRID = 'LH'. SPFLI-CONNID = ''.
SPFLI-CITYFROM = ............
INSERT SPFLI.
IF SY-SUBRC <> .
FLAG = 'X'.
ENDIF.
SPFLI-CARRID = 'AA'. SPFLI-CONNID = ''.
SPFLI-CITYFROM = ............
INSERT SPFLI.
IF SY-SUBRC <> .
FLAG = 'X'.
ENDIF.
................
................
IF FLAG = 'X'.
ROLLBACK WORK.
ELSE.
COMMIT WORK.
ENDIF.
在该示例中 ,LUW 将在 SPFLI 中插入一系 列特定的行 。在每个 INSERT 语句后,程 序将检查操 作是否成功 ,或检查具 有相应的主 码字段(CARRID 和 CONNID) 的行是否已 经在 SPFLI 中存在。稍 后,程序将 FLAG 设置为“X” 。如果对于 每一个 INSERT 语句,SY-SUBRC 没有设置为 0,那么最 后一个 IF 语句中的 ROLLBACK WORK 语句将取消 对数据库的 所有更改。 否则,用 COMMIT WORK 语句确认这 些更改。
ABAP-关于COMMIT WORK 和COMMIT WORK AND WAIT的更多相关文章
- [git] 细说commit (git add/commit/diff/rm/reset 以及 index 的概念)
http://kasicass.blog.163.com/blog/static/39561920133294219374/ 创建测试仓库 $ git init $ echo "line o ...
- git合并分支上的commit为一条commit到master
标签: git 缘由? 有一次被人问到怎么把一个分支的所有commit按一个commit合并到主分支上,当时一脸蒙B,平时开发都是直接merge,很少考虑到这种问题,于是特意搜索了相关资料. 场景 其 ...
- python中的一个现象,db.commit和db.commit()
假设有一个表,有自增字段,在开发环境中(sublime/Liclipse等)执行insert语句时,如果调用db.commit,那么数据库中不会有这条记录,但也不报错,再次插入成功时,自增自段加1. ...
- mysql存储过程中最后有commit和没有commit 是有所不同的。(为测试但是碰到过这个问题)
如果存储过程中没有执行commit,那么spring容器一旦发生了事务回滚,存储过程执行的操作也会回滚.如果存储过程执行了commit,那么数据库自身的事务此时已提交,这时即使在spring容器中托管 ...
- ABAP-关于隐式与显式的DB Commit
转载:https://www.cnblogs.com/liaojunbo/archive/2011/07/11/2103491.html 1.显式的DB Commit 显式的DB Commit并没有对 ...
- commit(), commitNow()和commitAllowingStateLoss()
关于FragmentTransaction的各种提交方法: commit(),commitAllowingStateLoss(),commitNow()和commitNowAllowingStateL ...
- git 修改最后一次提交的用户名 或者 commit的内容
修改git最后一次提交的命令 $ git commit --amend 修改git最后一次提交用户名的相关命令 git config user.name 'wangz' git config user ...
- xcode svn commit is not under version control (1) & git commit
使用Xcode提交一个第三方库时,由于包含资源文件,总是提交不了,提示报错:XXX commit is not under version control (1) 网上查了下,得知 xcode对于sv ...
- git cherry-pick合并某个commit
1.使用方法及其作用 git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作(操作的对象是commit).例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开 ...
随机推荐
- 为什么有时候 php 没有写闭合标签结束符?
找了一些资料,大家对PHP闭合标签的总结如下: 好处:如果这个是一个被别人包含的程序,没有这个结束符,可以减少很多很多问题,比如说:header, setcookie, session_start这些 ...
- My Router
新路由 型号:Y1 CPU:单核 链接终端:2 路由系统版本:1.6.6.171.6.9.17 运行时长:0天0小时17分13秒 MAC地址:20:76:93:28:CA:24 LAN口状态 MA ...
- async(await)知识点
async 函数是 Generator 函数的语法糖. async 函数对 Generator 函数的改进体现在: async 内置执行器. Generator 函数的执行必须靠执行器,需要调用 ne ...
- 洛谷 3784(bzoj 4913) [SDOI2017]遗忘的集合——多项式求ln+MTT
题目:https://www.luogu.org/problemnew/show/P3784 https://www.lydsy.com/JudgeOnline/problem.php?id=4913 ...
- Telnet 工具远程连接服务器
1.启动tomcat 2. 使用telnet命令 打开CMD,输入telnet localhost 8080 3.显示如下界面,说明已经连接成功 4. 复制如下代码到连接成功的界面 HEAD / ...
- 【jmeter】jMeter使用Badboy录制Web测试脚本
JMeter 是纯Java编写的软件功能和性.能测试工具,其录制脚本过于笨拙和复杂.而Badboy是用C++开发的动态应用测试工具,其拥有强大的屏幕录制和回放 功能,同时提供图形结果分析功能,刚好弥补 ...
- 驳《编码规范是技术上的遮羞布》自由发挥==摆脱编码规范?X
引子: 看了一坨文字<编码规范是技术上的遮羞布>,很是上火,见人见智,本是无可厚非,却深感误人子弟者众.原文观点做一个简单的提炼: 1.扔掉编码规范吧,让程序员自由发挥,你会得到更多的好处 ...
- Spring和Quartz集成
本文转载自:http://blog.csdn.net/u010648555/article/details/54891264 Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企 ...
- springMVC学习(2)
一.使用注解的处理器映射器和适配器 1) 在这个下面的/org/springframework/web/servlet/DispatcherServlet.properties文件,从这个文件中加载处 ...
- 1070 Mooncake (25 分)
1070 Mooncake (25 分) Mooncake is a Chinese bakery product traditionally eaten during the Mid-Autumn ...