内表
- 1. 概要
- 2. 内表与表头
- 3.内表的类型
- (1)类型
- (2)标准表
- (3)排序表
- (4)哈希表
- 4.比较内表速度
- (1)标准表与排序表
- (2)二分法查找
- (3)BINARY SEARCH和排序
- (4)测定哈希表速度-三种内表比较
- 5.内表命令
- (1)内表赋值
- (2)内表初始化
- (3)内表排序
- (4)内表属性
- 6.追加内表数据
- (1)INSERT语句
- (2)APPEND语句
- (3)COLLECT语句
- 7.修改内表数据
- (1)利用表关键字修改一条数据
- (2)利用WHERE条件修改多条数据
- (3)利用索引修改一条数据
- 8.删除内表数据
- (1)利用表关键字删除一条数据
- (2)利用WHERE条件删除多条数据
- (3)利用索引删除内表数据
- (4)利用ADJACENT DUPLICATE语句删除重复行
- 9.读取内表数据
- (1)利用关键字读取内表数据
- (2)利用索引读取内表数据
1. 概要
(1)定义:内表属于本地表,在程序内部定义和使用
(2)特点:
a. 内表是动态数组;
b. 内表刚定义时不会事先指定占用实际内存的大小,只使用INITIAL SIZE语句指定内表可以占用实际内存的大小。
(3)参照局部表类型创建内表
(4)参照全局表定义内表
2. 内表与表头
(1)定义:定义内表时用WITH HEADER LINE指明表头。
(2)区别:
3.内表的类型
(1)类型
标准表、排序表、哈希表。
(2)标准表
特点:利用索引查找内表行数据。
语法:
读取:
a.按索引读取
b.按关键字读取
(3)排序表
特点:已经按关键字排序好。排序表自带BINARY SEARCH功能。
区别:排序表定义关键字时,可使用WITH UNIQUE语句;而标准表只能使用WITH NO-UNIQUE语句。
(4)哈希表
特点:没有顺次索引,只能用哈希值计算出的key值进行检索,一定要设为Unique形式。
区别:哈希表的内表不存在索引,需使用READ TABLE ~ WITH TABLE KEY或WITH KEY语句。
4.比较内表速度
(1)标准表与排序表
特点:排序表读取数据速度很快;
标准表增加数据时比排序表快。
(2)二分法查找
定义:二分法查找是利用二进制检索数据的方法。
特点:使用之前要先按照关键字排序数据。
(3)BINARY SEARCH和排序
区别:排序表里的数据已经是有序数据,因此不需要SORT命令,也不需使用BINARY SEARCH。
(4)测定哈希表速度-三种内表比较
特点:哈希表读取数据时使用哈希算法,因此始终以相同的速度访问表;但是使用INSERT时速度会下降,而且关键字一定要设为Unique形式。
5.内表命令
(1)内表赋值
表头赋值:MOVE itab1 TO itab2.
内表赋值:MOVE itab1[] TO itab2[].
类型不同时赋值:MOVE-CORRESPONDING itab1 TO itab2.
(2)内表初始化
定义:初始化内表的语句有CLEAR、REFRESH、FREE这三种。
(3)内表排序
定义:用sort语句可以排序标准表和哈希表,默认是升序,而且可以指定排序字段。
语法:
注意: 每次使用SORT命令时排序序列号一直在变化。此时使用Stable Sort语句就能保留排序序列号,但也会消耗更多排序时间。
(4)内表属性
定义:可以用DESCRIBE语句确认内表属性。
语法:
说明:
A.LINES返回内表包含的数据件数;
B.OCCURS返回内表的初始大小;
C.KIND返回内表的类型,T代表标准表、S代表排序表、H代表哈希表。
6.追加内表数据
(1)INSERT语句
功能:插入到内表最后一行,根据内表类型不同,执行结果不同。
语法:
利用表关键字追加一条数据:
利用关键字追加多条数据:
例子:
利用索引追加一条数据
特点:语句执行完毕后,系统变量SY-SUBRC返回0,同时系统变量SY-TABIX返回索引值。
不同的内表类型有不同的INSERT效果:
(2)APPEND语句
功能:插入到内表最后一行。
语法:
追加一条数据:
追加多条数据:
特点:
a.只能利用索引插入,且哈希表不能使用APPEND语句。
b.APPEND INITIAL LINE?
不同的内表类型有不同的APPEND效果:
(3)COLLECT语句
功能:使用COLLECT语句可以合计内表中关键字相同的数字类型的字段;不存在关键字的内表,则会把CHAR类型的字段作为关键字执行相同的操作。
7.修改内表数据
(1)利用表关键字修改一条数据
特点:存在重复数据时,执行MODIFY语句会修改第一条数据。
语法:
(2)利用WHERE条件修改多条数据
语法:
(3)利用索引修改一条数据
特点:只能用于标准表和排序表。
语法:
8.删除内表数据
(1)利用表关键字删除一条数据
语法:
(2)利用WHERE条件删除多条数据
语法:
(3)利用索引删除内表数据
语法:
(4)利用ADJACENT DUPLICATE语句删除重复行
特点:执行此语句前要先用SORT语句排序内表。
语法:
9.读取内表数据
(1)利用关键字读取内表数据
语法:
(2)利用索引读取内表数据
语法: