SAP abap 的 clear refresh free 对工作表头和表体内容的操作后的区别

SAP abap 的 clear refresh free 对工作表头和表体内容的操作后的区别

先要理解 表头和表体的概念。 表头就是工作区,可以理解为结构体,只放一行记录,用来动态记录的。

表体是具体的表内容。调试的时候可以区分,带表头的变量右边会有个小帽子图标,左边有个表格图标,如下图的 GIT_ITAB

一、针对有Header Line表头的内表
Clear itab,这种情况下itab表示内表itab的表头,因而该语句的意思是:仅清空Header Line表头数据,同时释放表头所占用的内存空间,针对该内表表体的数据不做任何变动。
Clear itab[],这种情况下itab[]表示内表itab的表体,因而该语句的意思是:仅清空内表表体的数据,同时释放表体所占用的内存空间,针对该内表表头的数据不做任何变动。
Refresh itab,Refresh itab[],效果同Clear itab[],即清空内表itab表体数据,但是没有释放内表表体所占用的内存空间,因而需要添加Free itab表示释放内表表体内存空间。由此可见,Refresh 和 Free语句通常是连在一起使用的。
Free itab,Free itab[],效果同Clear itab[],即清空内表itab表体数据,同时释放内表表体所占用的内存空间。

语句执行后: 表头(存在数据) 表体(存在数据)
CLEAR git_itab. 没有
CLEAR git_itab[]. 没有
REFRESH git_itab. 没有
REFRESH git_itab[]. 没有
FREE git_itab. 没有
FREE git_itab[]. 没有

二、针对没有Header Line表头的内表
Clear itab,清空内表所有数据。
Clear itab[],效果同Clear itab。
Refresh itab,效果同Clear itab。
Free itab,效果同Clear itab。
也就是这4条语句针对没有表头的内表的效果都是一样的,即全部都是清空内表的数据。

测试语句:


DATA: BEGIN OF gs_line,
  col1    TYPE i,
  col2(1) TYPE c,
END OF gs_line.

*DATA: git_itab LIKE STANDARD TABLE OF gs_line.
DATA: git_itab LIKE STANDARD TABLE OF gs_line WITH HEADER LINE.

*gs_line-col1 = 1.
*gs_line-col2 = 'A'.
*INSERT  gs_line INTO TABLE git_itab.

git_itab-col1 = 1. "执行后表头有数据
git_itab-col2 = 'A'. "执行后表头有数据
INSERT table git_itab. "执行后表体有数据

*BREAK-POINT.

CLEAR git_itab.
*CLEAR git_itab[].
*REFRESH git_itab.
*REFRESH git_itab[].
*FREE git_itab.
*FREE git_itab[].

IF git_itab IS INITIAL.
  WRITE:/ '内表表头没有数据'.
ENDIF.

IF git_itab IS NOT INITIAL.
  WRITE:/ '内表表头有数据'.
ENDIF.

IF git_itab[] IS INITIAL.
  WRITE:/ '内表表体没有数据'.
ENDIF.

IF git_itab[] IS NOT INITIAL.
  WRITE:/ '内表表体有数据'.
ENDIF.

 

 

 

作者: 轻烟随风
当前文章地址: https://www.zyxpp.com/sap-abap-clear-refresh-free/
来源: 轻烟随风的博客
文章版权归作者所有,欢迎转载
THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录