使用ABAP的人,不可能逃過內表,使用內表的人不可能逃過內表定義,使用內表定義的人,可能很多人不了解定義的幾種內表的區別,當然我也包括在內,所以趁此機會,學習一下。
一般情況下都是定義為標準內表,那么有問題嗎?
1)內表的幾種形式
1.1 Standard Table(標準表),系統為該表的每一行數據生成一個邏輯索引。填充標準表時,可以將數據附加在所有行的最后,也可以插入到制定的位置,程序對內表行的尋址操作可以通過關鍵字或索引來進行(如果key值一致,返回的應該是順序第一次查到符合值的位置,存于SY-TABIX)。 在對表進行插入,刪除等操作時,各數據行在內存中的位置不變,系統僅重新排列各數據行的索引值。
1.2 Sorted Table (排序表),具有一个逻辑索引,不同之处是排序表总是按照其表关键字升序排序后再进行存储,其访问方式与标准表相同。
1.3 Hashed Table (哈希表),没有索引,只能通过关键字来访问。所以数据的访问与数据行的多少无关。
2)内表的定义语法
TYPES|DATA itab {TYPE|LIKE} tabkind
OF {linetype | lineobj}
[WITH key]
[INITIAL SIZE n].
在没特别声明时默认为 标准表。
2.1 表关键字 内表关键字在访问内表以及排序时非常之关键,定义时通过With key来定义,这也是一个可选项,即如果没有显式声明,那么内表中的非数值型栏位都为Key。 还有Unique的问题,即唯一性关键字声明,标准表不能使用此关键字,排序表可以用UNIQUE 或NON-UNIQUE,哈希表不能使用NON-UNIQUE,只能使用唯一表关键字。
2.2 内表可初始大小,考虑内存的准备时间,所以对程序效率会有影响,(影响大小暂不明确),使用过程中如果不够,会自动增加;开始分配的过大,也是会浪费内存的,如果初始为0或不指定大小,系统会默认使用8K空间,所以如果确认表比较小的话,最好制定大小。
2.3 occurs 是比较旧的定义方式,大家要朝前看。
3.我觉得最重要的也是最不好把握的就是:
具体到程序中应该使用什么类型的表,则取决与其预计需要容纳的数据行数和访问频率。 对于小于100行的内表,且很少使用关键字操作,则使用标准表没有任何效率问题;数据量比较巨大的,且不存在重复行的,只需要使用关键字访问的内表则应定义为哈希表;排序表适用于运行期内必须以某种排序方式出现的内表。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/554557/viewspace-469953/ ,如需转载,请注明出处,否则将追究法律责任。