ABAP 内表清空 refresh clear free

在我们使用完内表或者工作区后,需要进行一些清理工作。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之后:






以下是一个简单的 ABAP 动态内表的示例,它允许您在运行时动态添加和删除行: ```abap REPORT z_dynamic_internal_table. DATA: dynamic_table TYPE STANDARD TABLE OF any WITH DEFAULT KEY. FIELD-SYMBOLS: <fs_table> LIKE LINE OF dynamic_table. DATA: lv_choice TYPE i, lv_input TYPE i. DO. WRITE: / '1. Add row', / '2. Delete row', / '3. Display table', / '4. Exit'. WRITE: / 'Enter your choice: '. READ lv_choice. CASE lv_choice. WHEN 1. CLEAR: dynamic_table. WRITE: / 'Enter the number of rows to add: '. READ lv_input. DO lv_input TIMES. APPEND INITIAL LINE TO dynamic_table ASSIGNING <fs_table>. <fs_table> = sy-index. ENDDO. WRITE: / lv_input, ' rows added to table.'. WHEN 2. IF dynamic_table IS INITIAL. WRITE: / 'Table is empty.'. ELSE. WRITE: / 'Enter the row to delete: '. READ lv_input. DELETE dynamic_table INDEX lv_input. WRITE: / 'Row ', lv_input, ' deleted from table.'. ENDIF. WHEN 3. IF dynamic_table IS INITIAL. WRITE: / 'Table is empty.'. ELSE. LOOP AT dynamic_table ASSIGNING <fs_table>. WRITE: / <fs_table>. ENDLOOP. ENDIF. WHEN 4. EXIT. ENDCASE. ENDDO. ``` 该示例使用了 `any` 类型来声明动态内表,使其可以存储任何类型的数据。通过使用 `FIELD-SYMBOLS` 语句创建一个指向动态内表的行的字段符号,我们可以轻松地访问和操作表中的数据。 在主循环中,我们使用 `CASE` 语句来根据用户的选择执行不同的操作。当用户选择添加行时,我们清空表并使用 `APPEND INITIAL LINE TO` 语句添加指定数量的新行。当用户选择删除行时,我们使用 `DELETE` 语句删除指定索引处的行。最后,当用户选择显示表时,我们使用 `LOOP AT` 语句遍历表中的所有行并将其输出到屏幕上。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值