SAP ABAP – 读取内部表
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>.
这里内表的整行都用作搜索关键字。将表格整行的内容与<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 系统就会将该条目复制到目标工作区中。
例子
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。