序
HELLO,这里是百里,一个学习中的ABAPER,在工作学习中,我们会经常提交某些数据,或者说在同一个数据逻辑处理中.我们需要先计算前面的逻辑在处理后面的逻辑数据,这种相关的业务逻辑数据.此时就需要使用数据提交相关的内容.今天所讲的内容就是解决这方面需求的内容 .
为什么数据的提交
其实我们在ALV或者程序写完的时候,都会进行数据提交的动作,我们系统中的概念叫做隐式提交. 在SAP的系统中分钟两种提交的方式,分别是显示提交和隐式提交.commit 的作用就是到当前位置的代码,进行一次数据提交. 我经过debug 测试过,这个应该是同步进行的. 也就是按照代码写的顺序依次执行. commit work 语句是显式更新, 系统本身执行的形式叫做隐式执行.我们不需要增加什么相关的代码,只需要等程序执行完毕后即可,因为系统会自动提交.
技术解析
其实这个并没有什么所谓的技术点,他只有一句话,就是,执行插入、修改数据时,修改完之后要加上commit进行提交.
代码语言:javascript复制COMMIT WORK AND WAIT
ROLLBACK WORK
“同步更新
COMMIT WORK AND WAIT. "SAP LUW 显式提交
"该语句结束SAP LUW 并触发更新工作过程,该过程在同一个数据库 LUW 中进行更新操作,因为数据库 LUW 此时可以替代SAP开始进行一致性控制。
IF SY-SUBRC = 4.
ROLLBACK WORK. "取消对数 据库表所作 的更改
ELSE.
ENDIF.
为什么要commit呢,百里其实自己做了个实验,就是当数据量很少的时候就是你提交不提交也就那样了 效果是一样的, 但是! 当数据量很大的时候,sap是跟异步一样, 后续所需的数据,就会获取不到,此时就需要使用commit work and wait 进行数据处理,变成同步.这样方便后序数据操作 .
也通过询问一些大佬了解到,其实这些数据操作是在内存中的,叫做一个session ,如果他会在内存中计算.
实例解析
数据准备
代码语言:javascript复制""数据准备
" 数据准备
TYPES : BEGIN OF ty_DAta ,
DOCCODE TYPE char20 ,
ZROWID TYPE char20 ,
MATCODE TYPE char20 ,
MATNAME TYPE char20 ,
UOM TYPE char20 ,
MEMO TYPE char20 ,
END OF ty_DAta .
data : gs_Data TYPE ty_DAta .
data : gt_DAta TYPE TABLE of ty_DAta .
INITIALIZATION .
AT SELECTION-SCREEN .
at SELECTION-SCREEN OUTPUT .
START-OF-SELECTION .
编写子例程
代码语言:javascript复制*&---------------------------------------------------------------------*
FORM get_Data .
gs_Data-DOCCODE = 'XXXC23456' .
gs_Data-ZROWID = '53DSAXA' .
gs_Data-MATCODe = 'ZXA' .
gs_Data-MATNAME = 'FSD' .
gs_Data-UOM = 'N' .
gs_Data-MEMO = '备注1 备注1 备注1' .
APPEND gs_Data TO gt_DAta .
INSERT ZWDEMOTABLE1 from TABLE gT_Data .
select * from ZWDEMOTABLE1 INTO TABLE @DATA(gt_DAtaMES) where DOCCODE = 'XXXC23456'.
data(gt_DAta1) = gt_DAtaMES.
ENDFORM.
技术总结
今天讲的是abap数据库操作常用的commit ,一般所使用的的应用场景是操作自建表,因为标准表中都有bapi存在,而且禁止在标准表进行增删改查的操作.我们其实做的就就当数据量非常大时,将系统改成同步,方便数据操作.
百里鸡汤
休对故人思故国,且将新火试新茶。诗酒趁年华。
这里是百里,一个努力的学习者. 努力学习好好记录,点滴进步,就是成功.