ABAP 內表的一些知識點【學習筆記】

leniz發表於2008-10-10

使用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部落格 ” ,連結:http://blog.itpub.net/554557/viewspace-469953/,如需轉載,請註明出處,否則將追究法律責任。

相關文章