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> 表中的记录或行。
    Note− 如果<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 Line1  
    WITH 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         6 
    4         8 
    5         9 
    6         10 
    7         11 
    8         12
    
    在此示例中,mytable 有两个字段:ColP 和 ColQ。最初,mytable 填充有八行,其中 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。