1. 程式人生 > 其它 >ABAP 對內表的操作(增刪改讀及alv雙擊讀取資料)

ABAP 對內表的操作(增刪改讀及alv雙擊讀取資料)

對內表操作:  gt開頭為內表(gt_zav),wa開頭為工作區(wa_zav)

*修改
*MODIFY TABLE gt_zav FROM wa_zav. "修改整行
*MODIFY TABLE gt_zav FROM wa_zav TRANSPORTING CARRID. "修改某行的一欄位
*MODIFY gt_S001 FROM wa_S001 INDEX 1. "根據下標修改整行
*MODIFY gt_S001 FROM wa_S001 INDEX 1 TRANSPORTING SPMON. "根據下標修改一行某個欄位
*MODIFY gt_S001 FROM wa_S001 TRANSPORTING SPMON WHERE SPMON = '199701'. "根據條件修改多行符合條件的


*刪除
*DELETE TABLE gt_zav from wa_zav. "刪除一條
*DELETE gt_zav WHERE CARRID = '1'. "根據條件刪除多條
*DELETE gt_zav FROM 5 TO 10. "刪除5到10
*DELETE gt_zav FROM 5. "除5以後的
*DELETE gt_zav TO 10. "除開始到第十條的


*插入 (如果帶表頭的表,或者內表和工作區同名,這可以用隱式插入,不需要什麼工作區INTO到什麼表)
*Append xx "帶表頭 插入到表最後一行
*APPEND 工作區 into 內表 "不帶表頭 插入到表最後一行
*APPEND LINES OF gt_S002 TO gt_S001. "將gt_S002表所有資料插入gt_S001表的表尾巴
*APPEND LINES OF gt_S002 FROM 2 TO 4 TO gt_S001. "將gt_S002表的2到4行插入gt_S001表的表尾巴
*COLLECT wa_S001 INTO gt_S001. "所有欄位不同插入表尾,所有欄位相同,只有數值欄位不同則數字欄位彙總,變為一條資料
*INSERT wa_S001 INTO TABLE gt_S001. "插入一條到表尾
*INSERT wa_S001 INTO gt_S001 INDEX 3 . "插入一條資料至下標行
*INSERT LINES OF gt_S002 INTO TABLE gt_S001. "將gt_S002表所有資料插入gt_S001表的表尾巴
*INSERT LINES OF gt_S002 FROM 2 TO 4 INTO TABLE gt_S001. "將gt_S002表的2到4行插入gt_S001表的表尾巴
*注:使用INSERT時,如果表內已存在唯一主鍵,則sy-subrc會返回4,但不會dump error,反之sy-subrc會返回0


*讀取 (讀取內表資料 read是根據key去整個表裡查,所以 read得表不用在迴圈了;帶表頭和工作區與表名一致的可以省略into後語句,讀取成功sy-subrc返回0,否則返回4)
*讀取內表
READ TABLE gt_S001 INTO wa_S001 WITH KEY MATNR = 'PC_SERVICE_A'. "讀取內表符合條件的欄位入工作區,如果有多條,取內表符合的第一條sy-subrc返回0
READ TABLE gt_S001 FROM wa_S001 INTO wa_S001. "讀取內表符合條件的欄位入工作區,如果有多條,則取不到值sy-subrc返回4
READ TABLE gt_S001 INTO wa_S001 INDEX 1. "讀取內表下標為x的放入工作區
READ TABLE gt_S001 WITH TABLE KEY 欄位 = 'xxxx' 欄位 ='xxx' INTO wa_S001. "這必須key的鍵值條件寫全,否則報錯缺少表xx的鍵值primary_key的元件 欄位說明..
READ TABLE 內表 INTO 工作區
*備註:


*讀取alv雙擊的下標行資料放入工作區 (注:rs_selfield TYPE slis_selfield.)
READ TABLE 內表 INTO DATA(工作區) INDEX rs_selfield-tabindex
*獲取點選的欄位的值
rs_selfield-fieldname