ABAP几种内表的操作

来源:互联网 发布:叮叮软件功能 编辑:程序博客网 时间:2024/06/09 19:34

ABAP几种内表的操作

   这次的程序用到了哈希表,在这里,也顺便总结一下ABAP三种内表的特点。

   ABAP中有三类内表,标准表,排序表和哈希表。

三种内表介绍

   标准表的每一行对应一个逻辑索引-SY-TABIX,填充内表的时候,可以将数据附加在现有行之后,也可以插入到指定的位置,程序对内表行的寻址操作可通过关键字或索引进行。在对表进行插入删除等操作时,各数据行在内存中的位置不变,系统仅重新排列各数据行的索引值。

   排序表也有逻辑索引,不同的是排序表总是按其表关键字升序排列后再进行存储,也就是在内存中的位置发生改变。 哈希表没有索引,只有关键字。

行访问方式

                    标准表                    排序表                 哈希表

索引访问             允许                       允许                 不允许

关键字访问           允许                       允许                  允许

相同值关键字行       可重复                   可重复或不可重复       不可重复

推荐访问方式       主要通过索引               主要通过关键字        只能通过关键字 

 

具体到使用什么类型的内表    

    对于一个小于100行的内表,且很少使用关键字操作,则使用标准表没有效率问题;数据量比较巨大,切不存在重复行,只需使用关键字访问的内表应定义为哈希表;排序表适用于运行期内必须以某种排序形式出现的内表。

×××××××××××××××××××××××××××××××××××××××××××××××××

 

1. 内表的类型及定义:


( 1 ) .ANY TABLE :即任意表类型,此种定义方式只能在传递参数的时候定义。


例如: FORM XXX USING/CHANGING TYPE ANY TABLE .


( 2 ) .ANY TABLE 包括了两种类型: INDEX TABLE 和 HASHED TABLE 。


《 1 》 .INDEX TABLE :包括了 STANDARD TABLE 和 SORTED TABLE


A. STANDARD TABLE :其实就是一个线性表,通过 key 访问内表是线性查找的,也就是说,随着表中记录的增加,对表的操作的时间开销也相应的增加。


定义方法: TYPES/DATA : LIKE/TYPE STANDARD TABLE OF .


B. SORTED TABLE: 顾名思义,表中的记录是按照一定的顺序排列的。访问表的主要方式是表中定义的 key ,如果 key 不唯一,则选择 index 最小的那个。也可以通过 index 来访问排序表,如果你想通过 index 插入一条记录,系统会自动检查你插入的位置是否正确。所以,如果插入的时间比插入到标准表的时间会长。因此,尽量选择 key 来对排序表进行操作。


定义方法: TYPES/DATA : LIKE/TYPE SORTED TABLE OF .


《 2 》 .HASHED TABLE :对哈希表只能用你定义的 key 进行操作,而不能使用 index 进行操作。因此,定义哈希表必须定义 unique key 。注意:所有关于使用 index 操作表的语句都不能用于操作哈希表。例如: sort , loop 等。


定义方法: TYPES/DATA : LIKE/TYPE HASHED TABLE OF .


2. 内表的操作:


( 1 ) . 创建:


A. 定义一个结构,然后 type/like 这个结构


例如:


TYPES: BEGIN OF ,
...
igt; ..., 
...
END OF .


DATA TYPE STANDARD TABLE OF 
WITH NON-UNIQUE DEFAULT KEY
INITIAL SIZE 
WITH HEADER LINE.


B. type/like 系统表或者数据库表或者结构


DATA TYPE STANDARD TABLE OF < 系统表名 > 
INITIAL SIZE 
WITH HEADER LINE.


( 2 ) . 添加数据:


A . APPEND :直接向表中添加数据


1. APPEND [wa TO|INITIAL LINE TO] itab[ASSIGNING |REFERENCE INTO dref].


2. APPEND LINES OF itab1 [FROM idx1] [TO idx2] TO itab2.


3. APPEND [wa TO] itab SORTED BY f [ASSIGNING


B .向表中插入数据:


1. INSERT [wa INTO|INITIAL LINE INTO] itab [INDEX idx] [ASSIGNING |REFERENCE INTO dref].


2. INSERT [wa INTO|INITIAL LINE INTO] TABLE itab [ASSIGNING |REFERENCE INTO dref].


3. INSERT LINES OF itab1 [FROM idx1] [TO idx2] INTO itab2 [INDEX idx3].


4. INSERT LINES OF itab1 [FROM idx1] [TO idx2] INTO TABLE itab2.


C .相同字段求和向表里添加:


Basic form


COLLECT [wa INTO] itab.


Extras:


1. ... ASSIGNING 
2. ... REFERENCE INTO dref 
3. ... SORTED BY f


( 3 ) . 删除数据:


1. DELETE itab. 
2. DELETE TABLE itab WITH TABLE KEY k1 = v1 ... kn = vn. 
3. DELETE TABLE itab [FROM wa]. 
4. DELETE itab INDEX idx. 
5. DELETE itab FROM idx1 TO idx2. 
6. DELETE itab WHERE logexp. 
7. DELETE ADJACENT DUPLICATES FROM itab.


( 4 ) . 修改数据:


1. MODIFY itab [FROM wa] [INDEX idx] [ASSIGNING |REFERENCE INTO dref] [TRANSPORTING f1 ... fn].


2. MODIFY TABLE itab [FROM wa] [ASSIGNING |REFERENCE INTO dref] [TRANSPORTING f1 ... fn].


3. MODIFY itab [FROM wa] TRANSPORTING f1 ... fn WHERE cond.

原创粉丝点击