【摘要】 COMMIT WORK AND WAIT ROLLBACK WORK
**&———————————————————————*
**& Report ZSO_09_UPDATE
**&————————————————…
COMMIT WORK AND WAIT
ROLLBACK WORK
**&---------------------------------------------------------------------*
**& Report ZSO_09_UPDATE
**&---------------------------------------------------------------------*
**&
**&---------------------------------------------------------------------*
REPORT ZSO_09_UPDATE.
***************数据库插入数据*********************
*定义工作区
DATA LW_ITAB TYPE ZSO_09_H.
DATA LW_ITAB2 TYPE ZSO_09_I.
*定义表
DATA LT_ITAB LIKE TABLE OF LW_ITAB.
DATA LT_ITAB2 LIKE TABLE OF LW_ITAB2.
DATA LV_TEMP LIKE SY-INDEX VALUE 1.
*清空数据库表
DELETE FROM ZSO_09_H.
DELETE FROM ZSO_09_I.
*循环往内表添加数据
DO 100 TIMES.
LW_ITAB-ORDER_NUMBER = 10000000 + SY-INDEX.
LW_ITAB-CUSTOMER_NAME = '客户'.
LW_ITAB-COMPANY_NAME = SY-INDEX.
LW_ITAB-DELIVERY_DATE = SY-DATUM .
LW_ITAB-SALES_ORG = 1000 + SY-INDEX.
LW_ITAB-SALES_GROUP = '组'.
LW_ITAB-SALES_MAN = '销售人员'.
IF SY-INDEX MOD 10 = 0. LW_ITAB-PRODUCT_CATEG = 10.
ELSEIF SY-INDEX MOD 5 = 0. LW_ITAB-PRODUCT_CATEG = 20.
ELSE. LW_ITAB-PRODUCT_CATEG = 30.
ENDIF.
LW_ITAB-PRODUCT_CLASS = '产品中类'.
LW_ITAB-MADE_BY = '订单创建人'.
LW_ITAB-MADE_DATE = SY-DATUM.
LW_ITAB-MADE_TIME = SY-UZEIT. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' "去前导零 EXPORTING INPUT = LW_ITAB-COMPANY_NAME IMPORTING OUTPUT = LW_ITAB-COMPANY_NAME. INSERT LW_ITAB INTO TABLE LT_ITAB. LW_ITAB2-ORDER_ITEM = 1000 + SY-INDEX.
IF SY-INDEX MOD 3 = 0. LV_TEMP = SY-INDEX.
ENDIF.
LW_ITAB2-ORDER_NUMBER = 10000000 + LV_TEMP.
LW_ITAB2-PRODUCT_NUMBER = '产品编号' && SY-INDEX.
LW_ITAB2-PRODUCT_NAME = '面粉' && SY-INDEX.
LW_ITAB2-PRODUCT_QUAN = SY-INDEX.
LW_ITAB2-UNIT = 'KG'.
LW_ITAB2-PRICE = SY-INDEX.
LW_ITAB2-CURRENCY = 'CNY'. INSERT LW_ITAB2 INTO TABLE LT_ITAB2.
ENDDO.
*INSERT ZSO_09_H FROM TABLE LT_ITAB.
*WAIT UP TO 1 SECONDS.
*INSERT ZSO_09_I FROM TABLE LT_ITAB2.
*内表数据存入数据库 "ZSO_09_H必须生成表结构
CALL FUNCTION 'ZFSO_09_LUW_UPDATE_H' IN UPDATE TASK "该模块不是马上被执行,而是被放置于应用服务器中的一个特殊的更新工作过程(Update Work Process)中
TABLES IT_ITAB = LT_ITAB.
WAIT UP TO 1 SECONDS. "等待一秒
*WAIT UP TO '0.5' SECONDS. "等待0.5秒
CALL FUNCTION 'ZFSO_09_LUW_UPDATE_I' IN UPDATE TASK "封装分布在不同对话过程中的所有数据库更新操作
TABLES IT_ITAB = LT_ITAB2.
IF SY-SUBRC = 0. " COMMIT WORK [AND WAIT(同步)]. COMMIT WORK AND WAIT. "SAP LUW 显式提交 "该语句结束SAP LUW 并触发更新工作过程,该过程在同一个数据库 LUW 中进行更新操作,因为数据库 LUW 此时可以替代SAP开始进行一致性控制。 IF SY-SUBRC = 4. ROLLBACK WORK. "取消对数 据库表所作 的更改 WRITE 'FALSE'. ELSE. WRITE 'OK'. ENDIF.
ENDIF.
根据透明表创建表结构:
1、创建数据类型
2、选择表类型
3、行类型处输入表
要确认对数 据库表的更 改,请使用 COMMIT WORK 语句。要在 永久存储之 前取消一些 更改,请使 用 ROLLBACK WORK 语句。
COMMIT WORK AND WAIT
commit work,是异步更新,触发注册在当前SAP LUW中所有数据更新动作,数据更新动作由SAP的更新工作进程来执行,当前程序不等待更新动作结束,直接向下执行。
commit work and wait 是同步更新,此语句触发注册在当前SAP LUW所有数据更新动作,当前主程序等待SAP更新进程完成数据更新操作,然后向下执行。严格来说,commit work and wait也不是彻底的同步更新,此处等待数据更新操作完成,是指只等V1更新(优先级较高)完成,不等待其他优先级较低的V2更新等。
在 ABAP/4 报表中,可 能有几个作 业联系在一 起形成作业 的逻辑单元 (LUW) 。通常,可 能要处理 LUW 中的所有动作,或什么 也不要处理 。假设 LUW 中包含了将 五行插入到 数据库表中 的进程。如 果事务成功 ,所有五行 都将存储在 数据库表中这包含一 个更新请求 和一个数据 库事务)。 在显示新屏 幕之前,数 据库事务将 自动结束( ABAP/4 报表的结束 )。
在 ABAP/4 报表中不能 以任何方式 影响该进程
如果要保证 数据库中当 前所作的更 改立即被确 认,那么, 就必须使用 COMMIT WORK 语句结束 LUW。
COMMIT WORK在程序代码 中标记了 LUW 结束并启动 更新任务( 参见 COMMIT WORK 处理 )。在 COMMIT WORK 语句以后,对数据库所 作的所有更 改都不能再 取消。 但是,如果 在 LUW 中出现了错 误,就必须 取消已经执 行的部分。 这意味着当 前没有任何插入的行能 永久地保存 在数据库中 。
要撤销当 前 LUW 对数据库的 更改,请使 用 ROLLBACK WORK, 它将取消前 一次数据库 提交后的所 有更改。
ROLLBACK WORK
去前导零
文章来源: blog.csdn.net,作者:丨二三丨,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_34060435/article/details/116749444