1.内表和结构的定义

1.1参照数据库表实例化结构与内表.

声明内表:DATA  XXX  TYPE TABLE OF ZZZ.

声明结构:DATA  XXX  TYPE ZZZ.

注意:内表可添加表头(WITH HEADER LINE).

定义一个结构类型:

TYPES: BEGIN OF ZTEST_XXX ,

    ZCODE TYPE XXX-ZCODE, 

    ZNAME TYPE XXX-ZNAME,

    ZSEX TYPE XXX-ZSEX,

    ZSCHOOL TYPE XXX-ZSCHOOL,

    ZSNAME TYPE ZSCHOOL_HQ_03-ZSNAME,

END OF ZTEST_XXX.

自定义内表实体:DATA GT_XXX TYPE TABLE OF ZTEST_XXX.

自定义结构实体:DATA GS_XXX TYPE ZTEST_XXX.

 

2.内表新增数据(标准表、排序表、哈希表)

2.1APPEND.

(1)APPEND:在表的结尾追加行数据,表类型只能是排序表或者标准表.建议只在标准表中使用APPEND新增,排序表使用APPEND的行数据必须满足排序条件,否则程序会直接异常.

(2)关于APPEND的使用:

1.APPEND [结构|初始化]  TO 内表.(将一行数据或者初始化后的结构数据追加到内表).

2.APPEND LINES OF 内表1 FROM 1 TO 100 TO 内表2.(将内表1的第一行到100行的数据追加到内表2)

3.APPEND 表头行:追加表头行.

4.APPEND INITIAL LINE TO XXX:追加空行到XXX内表.

 

2.2 INSERT.

-将行插入到内表中指定的位置,需要使用INSERT语句.对于索引表,可以指定某行的索引,则新行将插入到该索引所代表的行之前;对于哈希表,不能指定行的索引,系统会按照关键字将新行插入其特殊位置.给内表插入行可以为单行,也可以为多行,甚至可以把整个内表的数据插入到其他内表中.

-按照索引值插入(只能用于索引表):INSERT LINE INTO 内表 INDEX 10.

-按照关键字插入(可以用于所有表):INSERT LINE INTO TABLE 内表.

-多行插入:INSERT LINES OF 内表1 FROM 1 TO 100 INTO TABLE 内表2  INDEX 5

-内表插入到数据库:INSERT 数据库表名 FROM TABLE 内表。

-结构插入到内表:INSERT 结构1 INTO TABLE 内表1。

 

2.3 COLLECT(只能在标准表中使用)

-与APPEND类似,但是COLLECT不是直接在表中新增,而是会根据表中主键字段做查询,如果主键字段重复就会合并重复行除了主键的其他字段.如果找不到重复主键就会新增一行数据(数字字段会合并,如果不能累加的字段则会新增数据行而不会合并).

2.4 MODIFY

CLEAR 结构.

结构-字段1='xxx'.

结构-字段2='ZZZ'.

MODIFY 内表 FROM 结构 INDEX 1.(修改内表第一行数据修改为结构里的数据).//根据结构去修改内表行数据.

MODIFY TABLE 内表 FROM 内表2. (将内表的数据修改为内表2的数据).//根据内表去修改内表数据.

MODIFY TABLE 内表 FROM 内表2 TRANSPORTING 字段3(内表2-字段3限制字段修改)

 

 通过循环修改表数据(内表循环判断的数据永远都是结构):

LOOP AT 内表 INTO 结构.

  IF 结构-字段1 = ‘条件成立’

    结构-字段2='成立后修改的值'

    MODIFY 内表 FROM 结构 INDEX SY-TABIX.(SY-TABIX 表示当前循环内表的索引,只有为排序表、标准表才有效,且如果是排序表一旦修改的数据后的数据不满住排序条件则系统报错,语法可去掉)/*如果使用的是哈希表则语法应该修改为:MODIFY TABLE 内表 FROM 结构*/

  ENDIF.

ENDLOOP

 

2.5 READ

-对于索引表可利用索引读取单行

READ TABLE 内表 INTO 结构 ASSIGNING<字段>  INDEX 100。

 

-通过关键字读取任何类型的内表(如果使用的是TABLE语法糖哈希表则KEY必须是主键,如果不适用TABLE语法糖,则KEY指定的字段无限制)

READ TABLE 内表 INTO 结构 WITH KEY 字段1=‘条件1’ 字段2='条件2'. //将内表满足条件的第一行数据读取到结构里

 

-对于拥有索引的表可以使用BINARY SEARCH 语法糖加快读取速度.(使用条件 1:内表必须是索引表. 2:内表必须已经按照要搜索的关键字排序)

-TANSPORTING NO FIELD  读取内表数据时该语法出现在结尾处表示读取的数据不保存在结构体.

▲READ排序:SORT 内表 BY  字段1  ASCENDING(升序)  字段2 DESCENDING(降序) /*先按照字段1升序排列,排序过后的数据再按照字段2做降序排列*/

 

2.6 DELETE

-根据索引删除行:DELETE 内表 INDEX 1.

-根据结构中的关键字找内表中关键字相同的行:DELETE TABLE 哈希排序表 FROM 结构.

-删除临近的重复行:1.先对需要执行删除操作的表进行排序.2.DELETE ADJACENT DUPLICATES FROM 内表 COMPARING ALL FIELDS.(如果不加上COMPARING ALL FIELDS 则只对比 字符串、数字字符串、时间天、时间小时分钟)

 2.7 清空内表结构的语法.

清空结构:CLEAR 结构.

清空内表表头行:CLEAR 内表.

清空内表数据:CLEAR 内表[].

清空内表标题行:REFRESH 内表.

释放表内存:FREE 内表.

注意:

CLEAR--

含有header line的内表:clear语句和refresh有相同作用。对于不含header line的内表:clear语句仅能初始化header line,内表数据并没有影响。

REFRESH--

此语句将删除内部表的全部内容(包括header line,如果是带有header line的内表)。之前所使用的部分内存仍可进行后续的插入操作。只清楚了表头行的内容和表体的内容.

 

FREE--

释放内表内存./*相当于C++里面的DELETE,指针变量指向nullptr*/