在我们使用完内表或者工作区后,需要进行一些清理工作。abap提供了3中方式:refresh,clear, free。
这3种方式的作用:
refresh
此语句将删除内部表的全部内容(包括header line,如果是带有header line的内表)
。之前所使用的部分内存仍可进行后续的插入操作。即清空了内存的数据,并没有回收完内存空间,内存还被改内表占据。
clear
含有header line的内表:clear语句和refresh有相同作用。
对于不含header line的内表:clear语句仅能初始化header line,内表数据并没有影响。
free
free会删除内表的全部内容(包括header line),并且会释放之前所用内存。一般用于已完成一些操作且程许后续不会再需要的内表。
现在并不建议使用带有header line的内表!当你使用的时候,比如为itab,你用itab-字段 表示工作区,用itab[]为内表。在abap调试器的变量就是这样处理的。
一个测试程序:
REPORT ZTEST_FERESH_FREE_CLEAR.
TABLES: zyhy_table01.
DATA: it_tab1 TYPE TABLE OF zyhy_table01 WITH HEADER LINE,
it_tab2 TYPE TABLE OF zyhy_table01 ,
wa_tab TYPE zyhy_table01,
a TYPE i,
b TYPE i.
SELECT *
INTO TABLE it_tab1
FROM zyhy_table01.
SELECT *
INTO TABLE it_tab2
FROM zyhy_table01.
LOOP AT it_tab1 INTO wa_tab FROM 1 TO 2.
WRITE: / it_tab1-ZXH2.
WRITE: / wa_tab-ZXH2.
ENDLOOP.
it_tab1-zxh2 = '20192000'.
it_tab1-zxm2 = 'qqqq'.
it_tab1-zxb2 = '女'.
it_tab1-zsg2 = '170'.
it_tab1-znl2 = '20'.
it_tab1-zdh2 = '1557510000'.
APPEND it_tab1 .
*CLEAR it_tab1 .
* REFRESH it_tab1.
CLEAR it_tab1.
REFRESH it_tab2.
FREE it_tab1.
LOOP AT it_tab1 INTO wa_tab FROM 1 TO 2.
WRITE: / it_tab1-ZXH2.
WRITE: / wa_tab-ZXH2.
ENDLOOP.
这里每次loop完,工作区就被初始化了。
REFRESH it_tab2.<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">之后</span>
free之后: