SAP-ABAP:SAP中DELECT语句用法详解实例总结
SAP-ABAP:SAP中DELECT语句用法详解实例总结
一、内表数据删除操作
操作类型 | 语法 | 示例 | 关键注意事项 |
---|---|---|---|
1. 按索引删除 | DELETE <itab> INDEX <idx> | DELETE lt_mat INDEX 3 | • 索引越界时 SY-SUBRC=4 • 删除后索引自动重排 |
2. 条件删除 | DELETE <itab> WHERE <cond> | DELETE lt_mat WHERE matnr = 'MAT001' | • 条件字段建议为排序/哈希键 • 大表用 SORT 预处理 |
3. 去重删除 | DELETE ADJACENT DUPLICATES [...] | SORT lt_mat BY matnr. DELETE ADJACENT... | • 必须预先排序 • COMPARING 缺省时比较所有字段 |
4. 清空内表 | REFRESH <itab> FREE <itab> | FREE lt_mat | • CLEAR :仅初始化表头• FREE :释放内存空间 |
二、数据库表删除操作
1. 单条删除 (行级操作)
DELETE FROM <dbtab> WHERE <key> = <val>.
COMMIT WORK. " 显式提交
场景:精确主键删除
示例:
DELETE FROM mara WHERE matnr = 'MAT001'.
IF sy-subrc = 0.COMMIT WORK.
ENDIF.
2. 批量删除 (高效操作)
DELETE <dbtab> FROM TABLE <itab>. " 内表需含完整主键
场景:删除1000+条记录
性能要点:
- 比循环单删快10x+
- 内表行数建议 ≤ 5000(避免锁超时)
3. 条件范围删除
DELETE FROM <dbtab> WHERE <field> IN <sel_range>.
示例:
DATA lt_range TYPE RANGE OF mtart.
lt_range = VALUE #( ( sign = 'I' option = 'EQ' low = 'ROH' ) ).
DELETE FROM mara WHERE mtart IN lt_range.
4. 关联删除 (多表操作)
DELETE FROM <table1>USING <table2>WHERE <table1>~<key> = <table2>~<key>AND <condition>.
示例:删除供应商未激活的物料
DELETE FROM maraUSING lfa1WHERE mara~lifnr = lfa1~lifnrAND lfa1