在我们使用完内表或者工作区后,需要进行一些清理工作。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之后:
――――――――――――――――
版权声明:本文为CSDN博主「wolf988」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yang362046076/article/details/49301771
来源:51CTO
作者:ws_yuan
链接:https://blog.csdn.net/weixin_37641163/article/details/100775341