SAP ABAP - 读取内部表

  • 简述

    我们可以使用 READ TABLE 语句的以下语法来读取表的行 -
    
    READ TABLE <internal_table> FROM <work_area_itab>.
    
    在此语法中,<work_area_itab> 表达式表示与 <internal_table> 表的行类型兼容的工作区。我们可以使用WITH KEY子句在READ语句中指定搜索键,但不能指定表键,如以下语法所示 -
    
    READ TABLE <internal_table> WITH KEY = <internal_tab_field>.
    
    这里内表的整行被用作search key。将表的整行内容与 <internal_tab_field> 字段的内容进行比较。如果<internal_tab_field>字段的值与表的行类型不兼容,则这些值将根据表的行类型进行转换。搜索键允许您查找内部表中没有结构化行类型的条目,即该行是单个字段或内部表类型。
    READ 语句的以下语法用于通过使用 COMPARING 子句指定工作区或字段符号 -
    
    READ TABLE <internal_table> <key> INTO <work_area_itab>
       [COMPARING <F1> <F2>...<Fn>].
    
    当使用COMPARING子句时,结构化行类型的指定表字段<F1>、<F2>....<Fn>在传输前与工作区的相应字段进行比较。如果指定 ALL FIELDS 子句,SAP 系统将比较所有组件。当 SAP 系统根据键找到条目时,SY-SUBRC 变量的值将设置为 0。此外,如果比较的内容,则 SY-SUBRC 变量的值将设置为 2 或 4字段不相同或者 SAP 系统找不到条目。然而,无论比较结果如何,只要 SAP 系统找到条目,SAP 系统就会将该条目复制到目标工作区。
  • 例子

    
    REPORT  ZREAD_DEMO. 
    */Creating an internal table 
    DATA: BEGIN OF Record1, 
    ColP TYPE I, 
    ColQ TYPE I, 
    END OF Record1. 
    DATA mytable LIKE HASHED TABLE OF Record1 WITH UNIQUE KEY ColP. 
    DO 6 Times.
    Record1-ColP = SY-INDEX. 
    Record1-ColQ = SY-INDEX + 5. 
    INSERT Record1 INTO TABLE mytable. 
    ENDDO. 
    Record1-ColP = 4. 
    Record1-ColQ = 12. 
    READ TABLE mytable FROM Record1 INTO Record1 COMPARING ColQ. 
    WRITE: 'SY-SUBRC =', SY-SUBRC. 
    SKIP. 
    WRITE: / Record1-ColP, Record1-ColQ.
    
    上面的代码产生以下输出 -
    
    SY-SUBRC =    2 
    4         9
    
    上面的例子中,mytable是一个哈希表类型的内表,以Record1为工作区,ColP为唯一键。最初,mytable 填充有六行,其中 ColP 字段包含 SY-INDEX 变量的值,ColQ 字段包含 (SY-INDEX + 5) 值。
    Record1 工作区填充了 4 和 12,分别作为 ColP 和 ColQ 字段的值。READ 语句使用 COMPARING 子句将 ColP 键字段的值与 Record1 工作区中的值进行比较后读取表的行,然后将读取行的内容复制到工作区中。SY-SUBRC 变量的值显示为 2,因为当 ColP 字段中的值为 4 时,ColQ 中的值不是 12,而是 9。