今天做ABAP编程时发现一个常用的删除内表特定行的操作失效了。代码样例如下:
LOOP AT it_data INTO DATA(wa_data).
READ TABLE it_vbak INTO DATA(wa_vbak) WITH KEY vbeln = wa_data-vbelv ."
IF sy-subrc = 0 .
DELETE TABLE it_data FROM wa_data.
CONTINUE.
endif.
ENDLOOP.
在Debug发现已经执行了 " DELETE TABLE it_data FROM wa_data." 但内表的对应行却没有删除。百思不得其解。后来查了一下资料。这个语句的删除根据 sy-tabix的值来删除的。所以一般来说,下面这样的语句是可以正常使用的。
LOOP AT it_data INTO DATA(wa_data).
DELETE TABLE it_data FROM wa_data.
ENDLOOP.
,而上面第一段的代码段会失效。因为loop循环里面还有一个read table 语句,这个语句会改变sy-tabix的值。所以要 ‘DELETE it_data INDEX tmp_index .’ 这样的语句。所以上面的代码要改造如下:
LOOP AT it_data INTO DATA(wa_data).
data(tmp_index) = sy-tabix. " 先把sy-tabix 的值临时保存下来
READ TABLE it_vbak INTO DATA(wa_vbak) WITH KEY vbeln = wa_data-vbelv ."
IF sy-subrc = 0 .
DELETE it_data INDEX tmp_index.
CONTINUE.
endif.
ENDLOOP.