SAP ABAP 删除内部表
DELETE 语句用于从内部表中删除一条或多条记录。通过指定表键或条件或查找重复条目来删除内部表的记录。如果内部表具有非唯一键并且包含重复条目,则删除表中的第一个条目。
以下是使用 DELETE 语句从内部表中删除记录或行的语法:
DELETE TABLE <internal_table> FROM <work_area_itab>.
在上述语法中,<work_area_itab> 表达式是一个工作区,它应该与 <internal_table> 内部表的类型兼容。删除操作基于可以从工作区组件中获取的默认键执行。
您还可以使用以下语法在 DELETE table 语句中显式指定表键:
DELETE TABLE <internal_table> WITH TABLE KEY <K1> = <F1>………… <Kn> = <Fn>.
在此语法中,<F1>, <F2>….<Fn> 是内部表的字段,并且 <K1>, <K2>….<Kn> 是表的关键字段。DELETE 语句用于根据表达式 <K1> = <F1>, <K2> = <F2>…<Kn> = <Fn>。删除 <internal_table> 表的记录或行。
注意:如果 <F1>, <F2>….<Fn> 字段的数据类型 与 <K1>, <K2>…<Kn> 字段的不兼容,那么 SAP 系统自动将其转换为兼容格式。
实例
REPORT ZDELETE_DEMO.DATA: BEGIN OF Line1,ColP TYPE I,ColQ TYPE I,END OF Line1.DATA mytable LIKE HASHED TABLE OF Line1WITH UNIQUE KEY ColP.DO 8 TIMES.Line1-ColP = SY-INDEX.Line1-ColQ = SY-INDEX + 4.INSERT Line1 INTO TABLE mytable.ENDDO.Line1-ColP = 1.DELETE TABLE mytable: FROM Line1,WITH TABLE KEY ColP = 3.LOOP AT mytable INTO Line1.WRITE: / Line1-ColP, Line1-ColQ.ENDLOOP.
结果如下:
2 64 85 96 107 118 12
在本例中,mytable 有两个字段,ColP 和 ColQ。最初,mytable 由 8 行填充,其中 ColP 包含值 1、2、3、4、5、6、7 和 8。ColQ 包含值 5、6、7、8、9、10、11 和 12,因为 ColP 值每次递增 4。
DELETE 语句用于删除 mytable 中的行,其中 ColP 键字段的值为 1 或 3。删除后,mytable 的 ColP 字段包含值 2、4、5、6、7 和 8,如输出所示。ColQ 字段包含值 6、8、9、10、11 和 12。