對內表的操作分為資料行操作和整個內錶操作兩大類,行操作可以通過關鍵字或索引兩種途徑進行,但是雜湊表不能通過索引操作。有時同樣的操作關鍵字語句,針對不同種類的內錶有不同的形式。
1,定義
參考字段定義
data:begin of i_list occurs 0 ,
matnr like mara-matnr,
werks like marc-werks,
end of i_list .
這種定義方式是帶表頭的
參考結構體/表/內錶定義
data:i_list2 like table of i_list with header line.
或者data: i_lis2 like i_list occurs 0 with header line.
可以選擇帶表頭或者不帶表頭由 with header line. 決定
參考結構體/表/內錶+欄位定義
data: begin of i_list3 occurs 0.
include structure i_list.
data: str(10) type c,
end of i_list3.
定義表頭/工作區
data:wa_list like i_list.
2,賦值
帶表頭的內錶可以直接用內表表頭,不帶表頭的內錶需要定義工作區
insert 插入資料
在最內錶最前面插入一條資料 index指定位置 注意:abap的內錶下標從1開始,和其他變成語言的下標從0開始有所不同 插入的下標會占用原來資料的位置,原來位置的資料會往下移一行
insert i_list index 1. "帶表頭
insert wa_list into i_list index 1. "不帶表頭
內錶間的賦值
結構相同的內錶可以直接賦值
i_list2 = i_list. 效果和 move i_list to i_list2. 相同 會覆蓋i_list2原有的值
move 如果不帶 只作用與表頭/工作區
比如:move i_list to i_list2. 標示表頭之間的賦值
不同結果內錶間的賦值,可以用迴圈處理
注意:move-corresponding 只對工作區用,move-corresponding i_list to i_list3. 語法錯誤
也可以迴圈中可以單個字段賦值,不然欄位太多就很麻煩了
這個效果同上是一樣的
當然 如果要將不同字段之間賦值就必須使用單個字段賦值了
3.read內錶
read的作用是讀取內錶一行,可以指定key或者index 行號
read table i_list with key matnr = '1001' werks = '1000'. "根據key讀取
if sy-subrc = 0.
write: '讀取到資料'.
endif.
read table i_list index 1. "根據行號讀取 讀取第一行
if sy-subrc = 0.
write: '讀取到資料'.
endif.
4.loop迴圈內錶
迴圈內錶非帶表頭和不帶表頭的迴圈,不帶標題的迴圈必須迴圈到乙個工作區做操作
loop at i_list to wa_list. "不帶表頭的內錶迴圈
endloop.
loop at i_list. "帶表頭的內錶迴圈
endloop.
注意:做loop的時候能做到帶條件最好帶條件,特別是對大資料量做處理的時候,效率會高很多
loop at i_list where matnr = '1001'. "帶條件的迴圈
endloop.
5.modify內錶
abap修改內錶常用的是modify 而modify常常在迴圈中使用
***將i_list中工廠為1000的資料物料修改為4001
loop at i_list.
if i_list-werks = '1000'.
i_list-matnr = '4001'.
endif.
modify i_list.
clear i_list.
endloop.
迴圈中的modify 最好放在每次迴圈最後,而且一般和 clear一起使用,以防修改到不對應的行
modify 還可以不用迴圈,可以根據表頭修改
wa_list-matnr = '4001'.
wa_list-werks = '1000'.
modify i_list from wa_list transporting matnr where werks = wa_list-werks.
這個效果和上面的效果是一樣的,而且效率要比上面的高
6.delete 內錶
根據where條件刪除
delete i_list where matnr = '4001'.
迴圈中刪除(能用where條件刪除的情況下不用迴圈刪除,當然有些情況下必須要在loop裡面刪除的另說)
loop at i_list.
if i_list-matnr = '4001'.
delete i_list.
continue.
endif.
endloop.
注意:迴圈中刪除的時候需要和continue.一起使用,不然如果迴圈中還做其他操作可能資料會亂
7.內錶排序和刪除重複行
內錶排序和刪除重複行也是開發中用的特別多的乙個功能
sort i_list by werks matnr. "預設的是公升序
sort i_list by werks matnr descending. "werks公升序 matnr降序
delete adjacent duplicates from i_list comparing wreks matnr. "刪除相鄰重複行
注意:刪除相鄰重複行之前,必須先排序
abap內錶的操作彙總
abap內錶是abap開發中最常用的工具之一 這裡總結乙個常用的一些操作,以後可以直接複製使用 1,定義 參考字段定義 data begin of i list occurs 0 matnr like mara matnr,werks like marc werks,end of i list 這種...
關於ABAP內錶
1.內錶的型別及定義 1 any table 即任意表型別,此種定義方式只能在傳遞引數的時候定義。例如 form using changing type any table 2 any table包括了兩種型別 index table和hashed table 1 index table 包括了st...
ABAP動態內錶
定義的動態內錶,對應內錶一行的工作區 field symbols type standard table type any.form create dynamic table data lt fcat type slis t fieldcat alv,ls fcat like line of lt ...