内表声明:内表分为三种 标准、排序、哈希
"标准内表,自带表头,有些人觉得新版本不应该使用此方法,但这个确实好用。
DATA:BEGIN OF T_ITAB OCCURS 0,
SID TYPE C,
SPINT TYPE I,
END OF T_ITAB.
"另一种
TYPES: BEGIN OF S_ITAB,
SID TYPE C,
SPINT TYPE I,
END OF S_ITAB.
TYPES T_ITAB TYPE S_ITAB OCCURS 10.
DATA T_ITAB1 TYPE T_ITAB."没有表头的内表
DATA T_ITAB2 LIKE T_ITAB1 WITH HEADER LINE."有表头的内表
"又一种
DATA:T_ITAB TYPE TABLE OF MARA WITH HEADER LINE."直接参考现有的透明表
"内表申明后现在讲内表的操作
"清空内表数据
CLEAR T_ITAB.清空表头数据
REFRESH T_ITAB.
FREE T_ITAB."清空内表数据
"增加内表数据
CLEAR T_ITAB.
APPEND T_ITAB."加一个空白行。
那要增加3个空白行怎么办,写3次
CLEAR T_ITAB.
APPEND T_ITAB."加一个空白行。
CLEAR T_ITAB.
APPEND T_ITAB."加一个空白行。
CLEAR T_ITAB.
APPEND T_ITAB."加一个空白行。
那要增加10个呢写10次,NO,写DO就OK,
DO 10 TIME."DO循环无条件执行重复执行多次代码,这里用笔记下
CLEAR T_ITAB.
APPEND T_ITAB."
ENDDO.
"LOOP循环
LOOP AT T_ITAB."如果是表头内表可以直接这样写,如不是则写成LOOP AT T_ITAB INTO S_ITAB.
T_ITAB-SID = 1.
MODIFY T_ITAB TRANSPORTING SID.逐行读取内表数据,为什么要读取,肯定是需要对内表操作才需要来LOOP,所以这里用MODIFY
ENDLOOP.
READ TABLE T_ITAB INDEX 1."单笔读取那一行,在数据多时比用LOOP更好,减少系统内存。
IF SY-SUBRC = 0."成功
T_ITAB-SID = 2.
MODIFY T_ITAB INDEX SY-TAIBX TRANSPORTING SID."在这里更改时使用了INDEX关键字,LOOP中不是不需要是默认INDEX为当前SY-TABIX.
ELSE."不成功。不成功则表明没有第一个索引数据
CLEAR T_ITAB.
T_ITAB-SID = 1.
APPEND T_ITAB.
ENDIF.
READ TABLE T_ITAB WITH KEY SID = 2."指定读什么数据,这里也是只读一笔,如果有两笔SID =2 的,也只读一笔数据
IF SY-SUBRC = 0.
T_ITAB-SID = 9.
MODIFY T_ITAB INDEX SY-TAIBX TRANSPORTING SID."在这里更改时使用了INDEX关键字,LOOP中不是不需要是默认INDEX为当前SY-TABIX.
ELSE."不成功。不成功则表明没有第一个索引数据
CLEAR T_ITAB.
T_ITAB-SID = 1.
APPEND T_ITAB.
ENDIF.
-------------------------------以上是单个内表的操作,现在讲多个内表操作----------------
DATA:BEGIN OF T_ITAB OCCURS 0,
SID TYPE C,
SPINT TYPE I,
END OF T_ITAB.
DATA:BEGIN OF T_ITABCOPY OCCURS 0,
SID TYPE C,
SPINT TYPE I,
END OF T_ITABCOPY.
DO 10 TIME."DO循环无条件执行重复执行多次代码,这里用笔记下
T_ITAB-SID = 1.
APPEND T_ITAB."
ENDDO.
"如何将T_ITAB的数据赋值给T_ITABCOPY。
一、
T_ITABCOPY[] = T_ITAB[].
二、
APPEND LINES OF T_ITAB TO T_ITABCOPY.
三、
LOOP AT T_ITAB.
MOVE-CORRESPONDING T_ITAB TO T_ITABCOPY.
APPEND T_ITABCOPY.
ENDLOOP.
”插入行
INSERT T_ITAB INTO TABLE T_ITABCOPY.“插入单行
INSERT lines of T_ITAB INTO TABLE T_ITABCOPY."插入多行
INSERT LINE INTO T_ITABCOPY INDEX 1.”按索引插入行
”删除内表数据
DELETE T_ITAB WHERE SID = 2."根据条件删除内表数据
DELETE T_ITAB INDEX 1.“指定删除第几行数据
DELETE T_ITAB."整个内表删除
SORT T_ITAB BY SID ."顺序排序 即ABCDE
SORT T_ITAB BY SID DESC."倒序排序,即EDCBA.
DELETE ADJACENT DUPLICATES FROM T_ITAB."删除重复行即有两行相同数据进行删除,保留第一笔数据,注删除前一定要排序
以下数据类型图片是在网上下载的