SAP ABAP 填充內(nèi)部表

2018-01-01 12:56 更新

在內(nèi)部表中,填充包括選擇,插入和追加等功能。 本章重點介紹INSERT和APPEND語句。

INSERT語句

INSERT語句用于將單個行或一組行插入內(nèi)部表。

以下是將一行添加到內(nèi)部表的語法:

INSERT <work_area_itab> INTO <internal_tab> INDEX <index_num>.

在此語法中,INSERT語句在internal_tab內(nèi)部表中插入一行。 可以通過在internal_tab參數(shù)之前使用work_area_itab INTO表達式插入新行。 當使用work_area_itab INTO表達式時,新行從work_area_itab工作區(qū)獲取,并插入到internal_tab表中。 但是,當不使用work_area_itab INTO表達式插入行時,該行從internal_tab表的標題行中獲取。

當通過使用INDEX子句將新行插入內(nèi)部表中時,插入行之后的行的索引號增加1.如果內(nèi)部表包含< index_num> - 1行,新行添加在表的末尾。 當SAP系統(tǒng)成功地將行添加到內(nèi)部表時,SY-SUBRC變量設置為0。

例子

以下是使用insert語句的示例程序。

REPORT  ZCUSLIST1. 
DATA: BEGIN OF itable1 OCCURS 4,
      F1 LIKE SY-INDEX,
      END OF itable1.
	
   DO 4 TIMES.
      itable1-F1 = sy-index.
      APPEND itable1.
   ENDDO.
	
itable1-F1 = -96.  
INSERT itable1 INDEX 2.  

LOOP AT itable1.
   Write / itable1-F1.  
ENDLOOP.  

LOOP AT itable1 Where F1 ≥ 3.
   itable1-F1 = -78.
   INSERT itable1.
ENDLOOP.

Skip.
LOOP AT itable1.
   Write / itable1-F1.
ENDLOOP.

上面的代碼產(chǎn)生以下輸出:

		1 
96- 
		2 
		3 
 4  
		1 
96- 
		2 
78- 
 3 
78- 
 4 

在上面的例子中,DO循環(huán)將包含數(shù)字1到4的4行附加到它。 標題行組件itable1-F1已分配值-96。 Insert語句將標題行作為新行插入到第3行之前的主體中。現(xiàn)有行3在插入后變?yōu)榈?行。 LOOP AT語句從內(nèi)部表中檢索F1值大于或等于3的那些行。在每一行之前,Insert語句從它的標題行插入一個新行。 在插入之前,F(xiàn)1組件已經(jīng)改變?yōu)榘?78。

執(zhí)行每個insert語句后,系統(tǒng)將重新編制所插入的行下面的所有行。 當在大型內(nèi)部表的頂部附近插入行時,會引入開銷。 如果需要將一個行插入到一個大型內(nèi)部表中,請準備另一個包含要插入的行的表,并改為使用插入行。

當在itable1的循環(huán)內(nèi)部在itable1中插入一個新行時,它不會立即影響內(nèi)部表。 它實際上在下一個循環(huán)傳遞中生效。 當在當前行之后插入一行時,該表在ENDLOOP處重新索引。 系統(tǒng)遞增,下一個循環(huán)處理syxix指向的行。 例如,如果您在第二個循環(huán)遍歷中,并且在第3行之前插入記錄。當執(zhí)行endloop時,新行將變?yōu)榈?行,舊行3將成為第4行,依此類推。 Sy-tabix增加1,下一個循環(huán)遍歷處理新插入的記錄。

APPEND聲明

APPEND語句用于向現(xiàn)有內(nèi)部表添加單個行或行。 此語句從工作區(qū)復制單個行,并將其插入內(nèi)部表中的最后一個現(xiàn)有行之后。 工作區(qū)可以是標題行或與內(nèi)部表的行具有相同結構的任何其他字段字符串。 以下是APPEND語句的語法,用于在內(nèi)部表中附加單個行:

APPEND <record_for_itab> TO <internal_tab>.

在此語法中,< record_for_itab> 表達式可以由< work_area_itab> 工作區(qū),可以轉換為行類型或INITIAL LINE子句。 如果用戶使用< work_area_itab> 工作區(qū)域時,SAP系統(tǒng)向< internal_tab> 內(nèi)部表,并用工作區(qū)的內(nèi)容填充它。 INITIAL LINE子句附加一個空行,其中包含表結構的每個字段的初始值。 在每個APPEND語句之后,SY-TABIX變量包含附加行的索引號。

使用非唯一鍵將行附加到標準和排序表中,無論表中是否存在具有相同鍵的行。 換句話說,可能發(fā)生重復條目。 但是,如果用戶嘗試使用唯一鍵向排序表中添加重復條目,或者用戶通過向其添加行來違反排序表的排序順序,則會發(fā)生運行時錯誤。

例子

REPORT  ZCUSLIST1. 
DATA: BEGIN OF linv Occurs 0,
      Name(20) TYPE C,
      ID_Number TYPE I,
END OF linv. 

DATA table1 LIKE TABLE OF linv. 
linv-Name = 'Melissa'. 
linv-ID_Number = 105467. 
APPEND linv TO table1. 
LOOP AT table1 INTO linv. 

Write: / linv-name, linv-ID_Number. 
ENDLOOP.

上面的代碼產(chǎn)生以下輸出:

Melissa		105467 
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號