首先说明一点:更新是异步的,更新是由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的更多相关文章

  1. [git] 细说commit (git add/commit/diff/rm/reset 以及 index 的概念)

    http://kasicass.blog.163.com/blog/static/39561920133294219374/ 创建测试仓库 $ git init $ echo "line o ...

  2. git合并分支上的commit为一条commit到master

    标签: git 缘由? 有一次被人问到怎么把一个分支的所有commit按一个commit合并到主分支上,当时一脸蒙B,平时开发都是直接merge,很少考虑到这种问题,于是特意搜索了相关资料. 场景 其 ...

  3. python中的一个现象,db.commit和db.commit()

    假设有一个表,有自增字段,在开发环境中(sublime/Liclipse等)执行insert语句时,如果调用db.commit,那么数据库中不会有这条记录,但也不报错,再次插入成功时,自增自段加1. ...

  4. mysql存储过程中最后有commit和没有commit 是有所不同的。(为测试但是碰到过这个问题)

    如果存储过程中没有执行commit,那么spring容器一旦发生了事务回滚,存储过程执行的操作也会回滚.如果存储过程执行了commit,那么数据库自身的事务此时已提交,这时即使在spring容器中托管 ...

  5. ABAP-关于隐式与显式的DB Commit

    转载:https://www.cnblogs.com/liaojunbo/archive/2011/07/11/2103491.html 1.显式的DB Commit 显式的DB Commit并没有对 ...

  6. commit(), commitNow()和commitAllowingStateLoss()

    关于FragmentTransaction的各种提交方法: commit(),commitAllowingStateLoss(),commitNow()和commitNowAllowingStateL ...

  7. git 修改最后一次提交的用户名 或者 commit的内容

    修改git最后一次提交的命令 $ git commit --amend 修改git最后一次提交用户名的相关命令 git config user.name 'wangz' git config user ...

  8. xcode svn commit is not under version control (1) & git commit

    使用Xcode提交一个第三方库时,由于包含资源文件,总是提交不了,提示报错:XXX commit is not under version control (1) 网上查了下,得知 xcode对于sv ...

  9. git cherry-pick合并某个commit

    1.使用方法及其作用 git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作(操作的对象是commit).例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开 ...

随机推荐

  1. [LeetCode系列] 从中序遍历和后序遍历序列构造二叉树(迭代解法)

    给定中序遍历inorder和后序遍历postorder, 请构造出二叉树. 算法思路: 设后序遍历为po, 中序遍历为io. 首先取出po的最后一个节点作为根节点, 同时将这个节点入stn栈; 随后比 ...

  2. 【转】每天一个linux命令(44):top命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/12/24/2831353.html top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进 ...

  3. h5 的 audio 标签知识点

    因为音频格式有版权,各浏览器使用不同的音频格式. 音频格式兼容性 音频格式 Chrome Firefox IE9 Opera Safari MP3 支持 不支持 支持 不支持 支持 OGG 支持 支持 ...

  4. C#调用Python脚本的简单示例

    C#调用Python脚本的简单示例 分类:Python (2311)  (0)  举报  收藏 IronPython是一种在 .NET及 Mono上的 Python实现,由微软的 Jim Huguni ...

  5. GCC参数详解 一

    gcc是gnu compiler collection 的简称,他包含了多种语言的编译器,如C, C++, Objective-C, Objective-C++, Java, Fortran和Ada. ...

  6. 复分析可视化方法:笔记:log(z)的可视化微分法

    当z转过θ时,我们来看看发生了什么: 左图中的空心箭头代表z的变化量,其长度为rδ,方向为pi/2+θ: 右图中的实心箭头代表log(z)的变化量,其长度为δ,方向为pi/2. 因此,从左图空心箭头到 ...

  7. 【Spring学习笔记-MVC-12】Spring MVC视图解析器之ResourceBundleViewResolver

    场景 当我们设计程序界面的时候,中国人希望界面是中文,而美国人希望界面是英文. 我们当然希望后台代码不需改变,系统能够通过配置文件配置,来自己觉得是显示中文界面还是英文界面. 这是,Spring mv ...

  8. Zabbix 命令:zabbix_get

    zabbix_get 作用总有人在群里提问,为什么 zabbix 获取不到数据,为什么 zabbix 提示 Not Support,怎么办?别老问,用 zabbix_get 试着获取数据即可.在 za ...

  9. [转]Excel 工作表保护密码移除

    http://blog.sina.com.cn/s/blog_4cf096b80100rhfb.html Public Sub 工作表保护密码() Const DBLSPACE As String = ...

  10. [UE4]添加机器人

    跟玩家角色一样,机器人也是继承自“Character”,动画蓝图也是跟角色玩家的一样,区别是机器人要使用“AIController”来控制