四、內表及其宣告
1.概述:內表是程式執行過程中建立的儲存空間,是記憶體中建立的臨時表,程式結束後,會被釋放。可對內表執行插入、修改和刪除操作。
2.分類:
表名 |
說明 |
效率 |
語法 |
標準表 |
在增加或插入資料行時不對資料行的地址進行重新排序,包含index,可通過index和key查詢,只能包含non unique key,key可為 |
效率取決於表的行,隨行數線性增加 |
TYPE TABLE OF、TYPE STANDARD TABLE OF |
排序表 |
在增加或插入資料行時對資料行的地址進行重新排序,包含index,可通過index和key查詢,可包含unique和non unique key,key必需;具有自動排序功能,所以SORT關鍵字對其沒有任何意義,還會導致編譯錯誤 |
效率取決於表的行數,隨行數對數級增長 |
TYPE SORTED TABLE OF |
雜湊表 |
只能通過關鍵字訪問,在檢索資料裡與資料行數無關,不包含index,只能通過key查詢,只能包含unique key,key必需 |
效率與行數無關,資料量大的情況下使用關鍵字查詢時最快的 |
TYPE HASHED TABLE OF |
示例:
TYPES:BEGIN OF TY_STU,
ID TYPE N,
NAME TYPE STRING,
AGE TYPE I,
END OF TY_STU.
表名 |
示例 |
注意 |
標準表 |
DATA GT_STU1 TYPE STANDARD TABLE OF TY_STU. |
只能使用NON-UNIQUE,可以省略 |
排序表 |
DATA GT_STU2 TYPE SORTED TABLE OF TY_STU WITH UNIQUE KEY ID. |
是否可以儲存重複的,取決於定義時指定的KEY型別是UNIQUE還是NON-UNIQUE |
雜湊表 |
DATA GT_STU3 TYPE HASHED TABLE OF TY_STU WITH UNIQUE KEY ID. |
只能使用UNIQUE,不能省略 |
3.內表操作:
操作型別 |
說明 |
語法 |
APPEND |
追加資料(雜湊表不支援) |
① LOOP AT ITAB1 APPEND ITAB1 TO ITAB2. ENDLOOP. ②APPEND LINES OF ITAB1 TO ITAB2. |
INSERT |
①標準表:與APPEND效果一樣;排序表:根據關鍵字插入合適位置;雜湊表:通過雜湊演算法根據關鍵字計算出插入的位置。②向UNIQUE的排序表/雜湊表插入重複的資料,資料不會插入成功,不拋異常 |
① INSERT WA INTO TABLE ITAB. ② INSERT LINES OF ITAB1 INTO ITAB2. |
DELETE |
①刪除單行:TABLE KEY(NON-UNIQUE型別的表,當查詢多條時,只會刪除第一條)②刪除多行:WHERE③刪除臨近重複行:ADJACENT DUPLICATE |
DELETE ITAB. |
READ |
標準表:順序查詢;排序表:二分查詢;雜湊表:根據雜湊演算法查詢 |
READ TABLE ITAB INTO WA. |
CHANGE |
MODIFY TABLE ITAB FROM WA |
|
COLLECT |
內表分類彙總 |
①COOLECT <work area> INTO ITAB. ②COOLECT ITAB. |
MODIFY |
①修改單條記錄:TABLE KEY(NON-UNIQUE型別的表,當查詢多條時,只會修改第一條)②修改多條記錄:WHERE |
①根據索引:MODIFY ITAB FROM WA INDEX IDX. ②根據關鍵欄位:MODIFY TABLE ITAB FROM WA. |
AT |
內表的第一行觸發 |
AT FIRST. …… ENDAT. |
內表的最後一行觸發 |
AT LAST. …… ENDAT. |
|
按內表列F,列的左邊發生改變時觸發(可用於按年、月、日統計) |
AT NEW F. …… ENDAT. |
|
按內表列F,列的右邊發生改變時觸發 |
AT END OF F. …… ENDAT. |
|
SORT |
排序 |
SORT ITAB. |
DESCRIBE |
獲取內錶行數 |
DESCRIBE TABLE ITAB LINES DATA(LV_LINE). |
LINES |
DATA(LV_DATA) = LINES(ITAB). |
4.清空內表
CLEAR ITAB:僅清空HEADER LINE,對內表資料儲存空間不影響
REFRESH ITAB:清空內表資料儲存空間,對HEADER LINE不影響
DREE ITAB:清空內表資料儲存空間,對HEADER LINE不影響