IF expression .
  ...
ELSEIF expression .
  ...
ELSE.
  ...
ENDIF.

IF SY-SUBRC IS NOT INITIAL .
  ...
ENDIF.
" NOT 可以前置
IF NOT SY-SUBRC IS INITIAL .
  ...
ENDIF.

内表的分类(ANY TABLE)

  • 索引表(INDEX TABLE)
  • 标准表(STANDARD TABLE) - 系统索引
DATA ITAB TYPE STANDARD TABLE OF STRU_TYPE . " 默认字符型字段为关键字(可以指定)
DATA ITAB TYPE STANDARD TABLE OF TAB_NAME .

 

  • 排序表(SORTED TABLE) - 系统索引,总是会有排序字段(声明时执行,一个或者多个),根据升序排列
DATA ITAB TYPE SORTED TABLE OF STRU_TYPE WITH UNIQUE KEY FIELDNAME FIELDNAME. " 根据字段排序,且字段不能重复
DATA ITAB TYPE SORTED TABLE OF STRU_TYPE WITH NON-UNIQUE KEY FIELDNAME FIELDNAME. " 根据字段排序,且字段可以重复

 

  • 哈希表(HASHED TABLE)- 没有索引(SY-TABIX没有值)
DATA ITAB TYPE HASHED TABLE OF STRU_TYPE WITH UNIQUE KEY FIELDNAME FIELDNAME.  " 哈希表的关键字段不可重复

 

" 表头行内表和工作区名称相同 通过 [] 进行区别 

" APPEND 追加到内表的最后一行(哈希表 HASHED TABLE 不能用,排序表插入时需要满足排序表的排序逻辑,否则会报错)常用于标准表 STANDARD TABLE

APPEND GS TO GT . " 结构体
APPEND GT . " 表头行
APPEND INITIAL LINE TO GT . " 插入空行
APPEND LINES OF GT1 FROM X TO Y TO GT2 . " 将表1的X行到Y行的数据追加到表2

" INSERT 插入行(可以指定位置)
" 按索引值插入(只能用于索引表),插入到索引之前
INSERT GS INTO GT INDEX X . 
" 按照关键字插入(所有表都可以)
INSERT GS INTO TABLE GT .
" 多行插入 TABLE 和 INDEX 不能共用 使用FROM必须是个索引表
INSERT LINES OF GT1 [ FROM X ][ TO Y ] INTO [ TABLE ] GT2 .
" COLLET 聚合 根据关键字(没有指定时默认全部字符字段)聚合数字型字段
COLLET GS INTO GT .

" 循环时数据需要到工作区
LOOP AT GT INTO GS .
 ...
ENDLOOP .

" 带表头行工作区和内表同名,可以省略
LOOP AT GT .
 ...
ENDLOOP .
" 修改数据 MODIFY
MODIFY GT FROM GS INDEX I . " 更新第几行的数据
MODIFY TABLE GT FROM GS . " 根据关键字更新表数据
MODIFY TABLE GT FROM GS TRANSPORTING FIELDNAME . " 根据关键字更新表字段

" 一般使用循环来更新数据
LOOP AT GT INTO GS .
 IF expression .
    GS-FIELDNAME = VALUE .
    MODIFY GT FROM GS . " INDEX SY-TABIX . LOOP索引表时可以省略 哈希表用MODIFY TABLE
 ENDIF.
ENDLOOP.
" READ 读取内表的数据
READ TABLE GT INTO GS INDEX I . " 读取第I行的数据,修改时需要指明SY-TABIX 
READ TABLE GT INTO GS WITH KEY expression . " 读取满足表达式的第一条数据

LOOP AT GT INTO GS WHERE expression . " 遍历符合条件的数据
 ...
ENDLOOP .

" HASHED TABLE 和 SORTED TABLE 读取时 KEY必须写全
READ TABLE GT INTO GS WITH TABLE KEY expression . " 读取满足表达式的第一条数据

" 读取时可以使用二分法提高效率,使用二分法之前需要对内表进行排序
SORT GT BY FIELDNAME . " ASDENDING 升序(默认)  DESCENDING 倒序
READ TABLE GT INTO GS WITH KEY FIELDNAME = VALUE BINARY SEARCH . " 二分法后缀 BINARY SEARCH .

" 确认数据是否存在,而不用取出来
READ TABLE GT  TRANSPORTING NO FIELDS . 
IF SY-SUBRC = 0 .
 ...
ENDIF .
" 删除数据 DELETE
DELETE GT FROM GS INDEX I . " 更新第几行的数据
DELETE TABLE GT FROM GS . " 根据关键字更新表数据

" 删除临近重复项 需要先排序
SORT GT BY FIELDNAME .
DELETE ADJACENT DUPLICATES FROM GT COMPARING FIELDNAME .

" 清空数据
CLEAR: GT , GS .

" 清空表体
REFRESH: GT . 

" 释放内存
FREE GT .