小知识点 clear、refresh、free三者清空内表

本文详细阐述了在SAPABAP中,如何使用CLEAR,REFRESH和FREE语句管理带表头和不带表头的内表。CLEAR仅清除工作区,REFRESH和FREE则用于清空内表,其中FREE还能释放内存。尽管SAP官方倾向于减少使用带表头的内表,但在维护旧代码时仍可能遇到。建议开发者了解并谨慎使用这些语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Data num type i value 10.
clear num. "清除值回到初始值 initial 0
free num."释放内存 也将数据移除了

内表:如果使用有表头行的内表,CLEAR 仅清除表格工作区域。例如 clear gs-school 清除工作区。

要重置整个内表而不清除表格工作区域,使用REFRESH语句或 CLEAR 语句CLEAR <itab>[].;REFRESH加不加中括号都是只清内表,另外REFRESH是专为清内表的,不能清基本类型变量,但CLEAR可以清基本类型变量。例如 clear gs-school[] 等价于 refresh gs-school 等价于 refresh gs-school[]。

CLEAR、REFRESH语句都不会释放掉内表所占用的空间。

如果想初始化内表的同时还要释放所占用的空间,请使用:FREE <itab>. 比如 free gs-school 可以释放内表空间。

TYPES: BEGIN OF ty_school,
schoolno() TYPE c,
schoolname() TYPE c,
END OF ty_school.
DATA gt_school TYPE TABLE OF ty_school WITH HEADER LINE.

gt_school-schoolno = ''.
gt_school-schoolname = '学生1'.
APPEND gt_school.
CLEAR gt_school.

gt_school-schoolno = ''.
gt_school-schoolname = '学生2'.
APPEND gt_school.
CLEAR gt_school.

gt_school-schoolno = ''.
gt_school-schoolname = '学生3'.
INSERT gt_school INDEX .
CLEAR gt_school.

WRITE '输出全表为:'.
LOOP AT gt_school.
WRITE / gt_school.
ENDLOOP.

gt_school-schoolno = ''.
gt_school-schoolname = '修改学生3'.
MODIFY gt_school INDEX .
CLEAR gt_school.
WRITE / '输出全表为:'.
LOOP AT gt_school.
WRITE / gt_school.
ENDLOOP.
CLEAR gt_school.

READ TABLE gt_school WITH KEY schoolno = ''.
WRITE: / '读取到的行为:',gt_school.
CLEAR gt_school.

DELETE TABLE gt_school WITH TABLE KEY schoolno = '' schoolname = '修改学生3'.
WRITE / '删除后的结果为:'.
LOOP AT gt_school.
WRITE / gt_school.
ENDLOOP.
gt_school-schoolno = ''.
gt_school-schoolname = '修改学生3'.

REFRESH gt_school.
APPEND gt_school.
CLEAR gt_school[].
Free gt_school.
APPEND gt_school.
CLEAR gt_school.
CLEAR gt_school.



 

现在SAP官方正在抛弃使用带表头的内表,面向对象就是一个很好的例子。

对于一个ABAP开发者,你可以确保你自己写的代码没有带表头的内表,但是不能确保你所要维护的代码没有带表头的内表。

函数中,接口中,系统为我们定义的内表都是带表头的内表。

所以我感觉他一时半会也抛弃不了。尽量少使用或者不使用。

本文中带表头的内表为itab

本文中不带表头的内表为gt_itab ,工作区为gs_itab

正文:

1.clear 用法

带表头:清空表头:CLEAR ITAB(注意此时不清空内表)     清空内表:CLEAR ITAB[] (注意此时没有清空表头)

不带表头:清空工作区:CLEAR  gs_itab  清空内表:CLEAR  gt_itab[] 

2.REFRESH 用法

只限于清空内表

带表头   REFRESH ITAB   

不带表头 REFRESH gt_itab 

3.FREE 用法

与REFRESH 类似,区别是清空同时它能释放内存,效率更高。

CLEAR、REFRESH、FREE

内表:如果使用有表头行的内表,CLEAR 仅清除表格工作区域。例如 clear gs-school 清除工作区。

要重置整个内表而不清除表格工作区域,使用REFRESH语句或 CLEAR 语句CLEAR <itab>[].;REFRESH加不加中括号都是只清内表,另外REFRESH是专为清内表的,不能清基本类型变量,但CLEAR可以清基本类型变量。例如 clear gs-school[] 等价于 refresh gs-school 等价于 refresh gs-school[]。

CLEAR、REFRESH语句都不会释放掉内表所占用的空间。

如果想初始化内表的同时还要释放所占用的空间,请使用:FREE <itab>. 比如 free gs-school 可以释放内表空间。

TYPES: BEGIN OF ty_school,
   schoolno() TYPE c,
   schoolname() TYPE c,
  END OF ty_school.
DATA gt_school TYPE TABLE OF ty_school WITH HEADER LINE.
 
gt_school-schoolno = ''.
gt_school-schoolname = '学生1'.
APPEND gt_school.
CLEAR gt_school.
 
gt_school-schoolno = ''.
gt_school-schoolname = '学生2'.
APPEND gt_school.
CLEAR gt_school.
 
gt_school-schoolno = ''.
gt_school-schoolname = '学生3'.
INSERT gt_school INDEX .
CLEAR gt_school.
 
WRITE '输出全表为:'.
LOOP AT gt_school.
  WRITE / gt_school.
ENDLOOP.
 
gt_school-schoolno = ''.
gt_school-schoolname = '修改学生3'.
MODIFY gt_school INDEX .
CLEAR gt_school.
WRITE / '输出全表为:'.
LOOP AT gt_school.
  WRITE / gt_school.
ENDLOOP.
CLEAR gt_school.
 
READ TABLE gt_school WITH KEY schoolno = ''.
WRITE: /  '读取到的行为:',gt_school.
CLEAR gt_school.
 
DELETE TABLE gt_school WITH TABLE KEY schoolno = '' schoolname = '修改学生3'.
WRITE / '删除后的结果为:'.
LOOP AT gt_school.
  WRITE / gt_school.
ENDLOOP.
gt_school-schoolno = ''.
gt_school-schoolname = '修改学生3'.
 
REFRESH gt_school.
APPEND gt_school.
CLEAR gt_school[].
Free gt_school.
APPEND gt_school.
CLEAR gt_school.
CLEAR gt_school.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值