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