Abap 删除行的最简单方法
以下代码是否有最简单/最快的方法:Abap 删除行的最简单方法,abap,internal-tables,Abap,Internal Tables,以下代码是否有最简单/最快的方法: DATA: lv_knuma_ag LIKE STANDARD TABLE OF zta_fg_hdr WITH HEADER LINE. RANGES: lr_knuma_ag FOR zta_fg_hdr-knuma_ag. "Select `knuma_ag` and save it to internal table `lv_knuma_ag` LOOP AT li_promo. SELECT dest~knuma_ag FRO
DATA: lv_knuma_ag LIKE STANDARD TABLE OF zta_fg_hdr WITH HEADER LINE.
RANGES: lr_knuma_ag FOR zta_fg_hdr-knuma_ag.
"Select `knuma_ag` and save it to internal table `lv_knuma_ag`
LOOP AT li_promo.
SELECT dest~knuma_ag
FROM zta_fg_dest AS dest
INNER JOIN zta_s_d_xkunnr AS xkunnr ON xkunnr~zcd_dest EQ dest~zcd_dest
APPENDING CORRESPONDING FIELDS OF TABLE lv_knuma_ag
WHERE dest~knuma_ag EQ li_promo-knuma_ag
AND xkunnr~xkunnr EQ gi_vl-vkbur.
ENDLOOP.
"Insert `lv_knuma_ag` onto ranges table `lr_knuma_ag`
LOOP AT lv_knuma_ag.
lr_knuma_ag-sign = 'I'.
lr_knuma_ag-option = 'EQ'.
lr_knuma_ag-low = lv_knuma_ag-knuma_ag.
lr_knuma_ag-high = space.
APPEND lr_knuma_ag.
ENDLOOP.
"Delete row in `li_promo` where `knuma_ag` is in ranges table `lr_knuma_ag`
IF NOT lr_knuma_ag IS INITIAL.
DELETE li_promo WHERE knuma_ag IN lr_knuma_ag.
ENDIF.
正如您在代码中看到的,它包含两次循环,只填充范围表。我只想做一个,可以吗?谢谢。是的,应该可以实现这一点,而不必让数据库管理系统中充斥着可能成千上万的查询:
DATA: lt_knuma_ag_hash TYPE HASHED TABLE OF insert_type_of_knuma_ag_here WITH UNIQUE KEY TABLE_table_line.
IF li_promo[] IS NOT INITIAL.
SELECT DISTINCT knuma_ag
FROM zta_fg_dest
INTO TABLE lt_knuma_ag_hash
FOR ALL ENTRIES IN li_promo
WHERE knuma_ag = li_promo-knuma_ag.
ENDIF.
LOOP AT li_promo ASSIGNING <li_promo>.
READ TABLE lt_knuma_ag_hash TRANSPORTING NO FIELDS WITH TABLE KEY table_line = <li_promo>-knuma_ag.
IF sy-subrc = 0.
DELETE li_promo.
ENDIF.
ENDLOOP.
DATA:lt_knuma_ag_哈希类型哈希表插入_knuma_ag_的类型_,此处带有唯一键表_TABLE_行。
如果li_promo[]不是首字母。
选择不同的knuma_ag
来自zta_fg_dest
放入表lt_knuma_ag_hash
对于li_促销中的所有条目
其中knuma_ag=li_promo-knuma_ag。
恩迪夫。
在li_promo分配时循环。
读取表lt_knuma_ag_hash不传输表键TABLE_line=-knuma_ag的字段。
如果sy subrc=0。
删除li_促销。
恩迪夫。
结束循环。
所以您想从ZTA\u FG\u DEST
中选择行,其中KNUMA\u AG
在LI\u PROMO
和LV\u KNUMA\u AG
中都有ZTA\u FG\u DEST
中,我想删除KNUMA\u AG
在ZTA\u FG\u DEST中的行,谢谢您的代码。但是,lv_knuma_ag
在您的代码中有什么作用?请参阅上面的更新。。