ABAP Read Table相关用法

本文详细解释了SAPABAP编程中READTABLE函数的多种用法,包括使用索引、通过主键查找、二分搜索以及COMPARING和TRANSPORTING关键字在处理内表和工作区数据时的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Read Table的常见用法:

READ TABLE gt_table INTO gs_table INDEX 1.
READ TABLE gt_table INTO gs_table WITH TABLE KEY c1 = field.
READ TABLE gt_table INTO gs_table WITH KEY c1 = field.
READ TABLE gt_table INTO gs_table WITH KEY c1 = field BINARY SEARCH.
READ TABLE gt_table INTO gs_table INDEX 1 COMPARING c1.
READ TABLE gt_table INTO gs_table INDEX 1 COMPARING ALL FIELDS.
READ TABLE gt_table INTO gs_table INDEX 1 TRANSPORTING c1 c2.
READ TABLE gt_table INDEX 1 TRANSPORTING NO FIELDS.

下面笔者解释一下其中的部分关键词

INDEX :索引,根据内表索引来查找

WITH KEY/WITH TABLE KEY:通过内表的主键来查找

*WITH TABLE KEY 后必须把表的所有关键字都加上,WITH KEY不用

BINARY SEARCH:二分法(使用前需排序,常识不用多说吧)

COMPARING:只查找设置的字段

COMPARING ALL FIELDS:查找所有字段

TRANSPORTING:只输出设置的字段数据

TRANSPORTING NO FIELDS:不输出字段,只判断是否存在(与IF SY-SUBRC一起搭配)

下面重点提一下COMPARING和TRANSPORTING

READ TABLE gt_table INTO gs_table INDEX 1 COMPARING c1.
COMPARING关键词会先将gs_table(工作区)的字段C1与gt_table(内表)的1行(INDEX 索引)中的C1做对比
如果比对结构相同,sy-subrc = 0.若不同,sy-subrc = 2,未找到则sy-subrc = 4.
不管如何只要找到(INDEX 1,找到第一条)就会进行赋值

如果COMPARING后面是ALL FIELDS,则将比较所有字段

DATA: BEGIN OF gs_table,
  c1 TYPE i,
  c2 TYPE i,
END OF gs_table.
DATA gt_table LIKE HASHED TABLE OF gs_table WITH UNIQUE KEY c1.
DO 6 TIMES.
gs_table-c1 = sy-index.
gs_table-c2 = sy-index * 2.
INSERT gs_table INTO TABLE gt_table.
ENDDO.
gs_table-c1 = 3.
gs_table-c2 = 8.
READ TABLE gt_table FROM gs_table INTO gs_table COMPARING c2.
WRITE: 'SY-SUBRC =', sy-subrc.
SKIP.
WRITE: / gs_table-c1, gs_table-c2.

输出:
SY-SUBRC =     2

         3           6
READ TABLE gt_table INTO gs_table INDEX 1 TRANSPORTING c1.
TRANSPORTING关键词只将关键词后面的字段(c1)写入工作区(gs_table)
若TRANSPORTING关键词是 NO FIELDS,则只查询,工作区可不写(写了也无效果)
READ TABLE gt_table  INDEX 1 TRANSPORTING c1.
一般后接 IF sy-subrc = 0.进行判断

DATA: BEGIN OF gs_table,
  c1 TYPE i,
  c2 TYPE i,
END OF gs_table.
DATA gt_table LIKE HASHED TABLE OF gs_table WITH UNIQUE KEY c1.
DO 6 TIMES.
gs_table-c1 = sy-index.
gs_table-c2 = sy-index * 2.
INSERT gs_table INTO TABLE gt_table.
ENDDO.
gs_table-c1 = 3.
gs_table-c2 = 8.
*READ TABLE gt_table INTO gs_table WITH KEY c1 = gs_table-c1 TRANSPORTING c1.
READ TABLE gt_table WITH KEY c1 = gs_table-c1 TRANSPORTING NO FIELDS.
WRITE: 'SY-SUBRC =', sy-subrc.
SKIP.
WRITE: / gs_table-c1, gs_table-c2.

结果都为:
SY-SUBRC =     0

         3           8

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值