文章目录
前言
内表是sap程序中频繁使用到。属于开发的基本功能,在其他语言中没有词语法,类似于动态数组。
一、内表概念
1 概念
内表属于本地表,在程序内部定义和使用,内表是动态数组。
2 三种定义方式
DATA <内表名> TYPE <结构类型> WITH [UNIQUE|NON-UNIQUE] [INITIAL SIZE n] [WITH HEADER LINE]。
DATA <内表名> LIKE TABLE OF <内表或者透明表> WITH [UNIQUE|NON-UNIQUE] [INITIAL SIZE n] [WITH HEADER LINE]。
DATA BEGIN OF itab OCCURS n,
......
END OF itab [VALID BETWEEN f1 AND f2]。
方法一:参照局部表类型创建内表。
也可以直接 data: gt_itab type standard table of s_type .
方法二:参照全局表类型创建内表
参照物理表 scarr定义内表gt_itab。
二、内表类型
1 标准表
定义: standard table
data: lt_table type standard table of mara .
读取:可以按索引和指定关键字
read table lt_table index 1 .
read table lt_table with table key field = '' . table key 需指定所有key
read table lt_table with key field = '' . with key 读取关键字以外的字段
标准表sort后就等于 排序表。可以使用二分法查找。
sort table lt_table by matnr
read table lt_table with key matnr = '' binary search .
2 排序表
定义: sorted table
data: gt_itab type sorted table of mara with unique key matnr .
特点: 1 必须指定key ,可以unique key 或者是 NON-UNIQUE KEY
2 可以使用index和key来读取
3 不需要在排序
3 哈希表
定义: DATA IT_YM TYPE HASHED TABLE OF VBAP WITH UNIQUE KEY VBELN.
特点: 必须指定key,并且是unique key
只可以使用关键字访问,不可以使用index查询
查询时间和记录数无关
三、内表速度
读取: 在大数据量情况下 哈希表最快,排序表次之 。
插入:标准表>哈希表>排序表
四、内表命令
1内表初始化
有 clear refresh 和free三种。
clear清除内表数据的同时,释放了内存空间。
refresh只能清空内表数据,不会释放内存,因此使用refresh需要结合 free释放内存 。
2内表赋值
表头赋值: move itab to itab2 。
内表赋值: move itab[] to itab2 .
字段不一致赋值: move-corresponding itab to itab2 .
3内表排序
sort itab by f1 asending|decending
4内表属性
describe table itab lines lv_line occurs gv_init kind gv_kind
lines 返回条数
0ccurs 返回初始大小
kind 返回表类型 T标准 S 排序 H哈希
5 循环内表 loop
循环控制 :
at first
at last
at new
at end of
五、内表追加
1 insert
默认追加到最后一条,可以索引指定位置
追加一条: insert line into table itab
追加多条: insert lines of itab into table itab2 .
2 append
插入到最后。
哈希表不能使用
3 collect
功能:使用COLLECT语句可以合计内表中关键字相同的数字类型的字段;不存在关键字的内表,则会把CHAR类型的字段作为关键字执行相同的操作。
六、修改数据
1 利用表关键字修改一条
modify table itab from wa [transporting f1]
如果多条则只修改第一条
2 利用where条件修改多条
modify table itab from wa [transporting f1] where
3 利用索引修改一条
modify table itab from wa index idx [transporting f1]
七、删除内表数据
delete
删除重复数据 ADJACENT DUPLICATE 使用前先排序
八、读取内表数据
READ 三种使用
1 Read table itab [into wa | assigning <fs>] index idx .
2 Read table itab with table key k1 = f1 kn=fn [into wa | assigning <fs>] .
3 Read table itab with key k1 = f1 kn=fn [into wa | assigning <fs>]