SAP ABAP 读取内部表

我们可以使用 READ TABLE 语句的以下语法来读取表的行:

  1. READ TABLE <internal_table> FROM <work_area_itab>.

在此语法中,<work_area_itab> 表达式表示与 <internal_table> 表的行类型兼容的工作区。我们可以使用 WITH KEY 子句在 READ 语句中指定 search key(搜索键),但不能指定 table key(表键),如下语法所示:

  1. READ TABLE <internal_table> WITH KEY = <internal_tab_field>.

这里,内部表的整行用作 搜索键。将表格整行的内容与 <internal_tab_field> 字段的内容进行比较。如果 <internal_tab_field> 字段的值与表格的行类型不兼容,则会根据表格的行类型转换这些值。搜索键可以让您在没有结构化行类型的内部表中查找条目,即行是单个字段或内部表类型。

READ 语句的以下语法用于使用比较子句指定工作区或字段符号:

  1. READ TABLE <internal_table> <key> INTO <work_area_itab>
  2. [COMPARING <F1> <F2>...<Fn>].

使用比较子句时,结构化行类型的指定表格字段 <F1>, <F2>….<Fn> 在传输之前与工作区的相应字段进行比较。如果指定了 ALL FIELDS 子句,则 SAP 系统会比较所有组件。当 SAP 系统根据键找到条目时,SY-SUBRC 变量的值设置为 0。此外,如果比较字段的内容不相同或 SAP 系统无法找到条目,则 SY-SUBRC 变量的值设置为 2 或 4。然而,无论比较结果如何,只要找到条目,SAP 系统就会将条目复制到目标工作区。


实例

  1. REPORT ZREAD_DEMO.
  2. */Creating an internal table
  3. DATA: BEGIN OF Record1,
  4. ColP TYPE I,
  5. ColQ TYPE I,
  6. END OF Record1.
  7. DATA mytable LIKE HASHED TABLE OF Record1 WITH UNIQUE KEY ColP.
  8. DO 6 Times.
  9. Record1-ColP = SY-INDEX.
  10. Record1-ColQ = SY-INDEX + 5.
  11. INSERT Record1 INTO TABLE mytable.
  12. ENDDO.
  13. Record1-ColP = 4.
  14. Record1-ColQ = 12.
  15. READ TABLE mytable FROM Record1 INTO Record1 COMPARING ColQ.
  16. WRITE: 'SY-SUBRC =', SY-SUBRC.
  17. SKIP.
  18. WRITE: / Record1-ColP, Record1-ColQ.

结果如下:

  1. SY-SUBRC = 2
  2. 4 9

在上例中,mytable 是哈希表类型的内部表,Record1 作为工作区,ColP 作为唯一键。最初,mytable 由 6 行填充,其中 ColP 字段包含 SY-INDEX 变量的值, ColQ 字段包含(SY-INDEX + 5)值。

Record1 工作区分别填充 4 和 12 作为 ColPColQ 字段的值。READ 语句在使用比较子句将 ColP 键字段的值与 Record1 工作区中的值进行比较后读取表的行,然后在工作区中复制读取行的内容。SY-SUBRC 变量的值显示为 2,因为当 ColP 字段中的值为 4 时,ColQ 中的值不是 12,而是 9。

分类导航