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 .