当前位置:首页 > 很全abap入门知识
INSERT LINES OF itab1 [from n1 to n2] INTO TABLE itab2.
INTO itab2 [ INDEX n]
读取内表的一条将数据读到结构体中,如果系统独到行 sy-subrc = 0 . 然后读取到结构体中,Sy-tfill 存放总行数,Sy-tleng 行的长度,Transporting 指定特定列传输字段,传送部分字段TRANSPORTING NO Fields 不传值,作用,看内表中有没有这条数据Camparing有一个结构体和内表 C1 C2 C3 Lh 0019 17 Lh 0018 18
通过comparing 后的值,可以判断读取的值是否符合要求.现在结构体中需要比较的字段赋值,先判相应字段是否相等比较成sy-subrc = 0 Zmycompare_2009 用一个结构作为 查询条件,到内表查询符合条件的数据With key 可以用 table key 或 普通字段作为条件使用field symbol
通过一个内表定义一个结构体作为指针
Read table itab [index n / key ] assigning
直接修改
Transporting 的 传输方向 通过 field symbol 直接修改 内表
重要: 不能直接指针对sorted 和 hash表进行操作
Delete
Delete table itab key Key: from wa ()
With table key k1 = f1….
不能用sort 对排序表进行排序对sorted表进行insert modify,使用不当可能会出错.
HASH表不能通过 index 进行操作 Header line
With head line 关键字定义 废弃用法 Occur + 整数, 10 , Occur 0 , 默认大小,
Occur 0 with head line 废弃用法了
重要: 在面向环境中 不能用带有 head line 的内表
Data: so_carr LIKE RANGE OF carrid. Loop 内表
Where 条件 从起始点二分查找
标准表 可以部分指定顺序 From 1 to 5
对于一个标准表来说, 加上二分查找 是不是 先排序 先把标准表 排序, 然后再二分 必须先手工排序,再进行二分查找
关于ABAP内表(about abap internal table)
44. 内表的类型及定义:
1) ANY TABLE:即任意表类型,此种定义方式只能在传递参数的时候定义。 例如:FORM XXX USING/CHANGING TYPE ANY TABLE .
ANY TABLE包括了两种类型:INDEX TABLE和HASHED TABLE 。 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 .
45. HASHED TABLE:对哈希表只能用你定义的key进行操作,而不能使用index进
行操作。因此,定义哈希表必须定义uniquekey 。注意:所有关于使用index操作表的语句都不能用于操作哈希表。例如:sort,loop等。
定义方法:TYPES/DATA: LIKE/TYPE HASHED TABLE OF .
46. 内表的操作:
1) 创建:
A. 定义一个结构,然后type/like这个结构
例如:
TYPES: BEGIN OF , ...i> ..., ...
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.
ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介 OCCURS 0
先是用TYPES关键字定义一个行(row)的类型. 如下:
TYPES: BEGIN OF line, field1 TYPE i, field2 TYPE i, END OF line.
这里的line,就相当于一个自定义的类型,表示一行(row)的字段(field).这里一行有两个字段field1和field2.
然后是声明一个work area: DATA wa TYPE line.
我用C++(还是对cpp最有好感^^)的概念理解就是,line是一个class,而wa是一个object.
接着是声明一个每一行的类型是line的internal table: DATA itab TYPE line OCCURS 0.
我在暂时把OCCURS作为了区别工作区和内表的标志.OCCURS应该有更深层次的意义,但我目前只能领悟至此...
当我们用以上这个方法来声明一个iternal table时,可以选择是否有无header line.
上面这句就是没有header line的.改成如下就有了:
DATA itab TYPE line OCCURS 0 WITH HEADER LINE.
有无header line的区别就是,header line可以当作一个work area来使用(参照我之前的一个日志).
有一下两种方式操作itab: a) wa-field1 = 1.
wa-field2 = 2.
APPEND wa TO itab. b) itab-field1 = 1.
itab-field2 = 2. APPEND itab. 这里wa就是上面那个已经定义的work area.
有header line的时候,这两种都可以.无header line的时候,只能用第1种. 第2种里,itab的意义是一个header line,而不是内表.因为\line OCCURS 0 WITH HEADER LINE.\这样的声明,已经隐式声明了一个与内表同
共分享92篇相关文档