ABAP-內(nèi)表-操作手冊說明書_第1頁
ABAP-內(nèi)表-操作手冊說明書_第2頁
ABAP-內(nèi)表-操作手冊說明書_第3頁
ABAP-內(nèi)表-操作手冊說明書_第4頁
ABAP-內(nèi)表-操作手冊說明書_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、ABAP-內(nèi)表操作2012年02月15日目錄 TOC o 1-3 h z u HYPERLINK l _Toc317586745 1引言 PAGEREF _Toc317586745 h 4 HYPERLINK l _Toc317586746 1.1目的及范圍 PAGEREF _Toc317586746 h 4 HYPERLINK l _Toc317586747 1.2參考資料 PAGEREF _Toc317586747 h 4 HYPERLINK l _Toc317586748 1.3定義 PAGEREF _Toc317586748 h 4 HYPERLINK l _Toc317586749

2、1.4文檔結(jié)構(gòu) PAGEREF _Toc317586749 h 4 HYPERLINK l _Toc317586750 2內(nèi)表介紹 PAGEREF _Toc317586750 h 4 HYPERLINK l _Toc317586751 2.1內(nèi)表種類 PAGEREF _Toc317586751 h 4 HYPERLINK l _Toc317586752 2.2內(nèi)表屬性 PAGEREF _Toc317586752 h 5 HYPERLINK l _Toc317586753 2.3內(nèi)表定義 PAGEREF _Toc317586753 h 5 HYPERLINK l _Toc317586754 2.

3、3.1參照數(shù)據(jù)類型定義內(nèi)表 PAGEREF _Toc317586754 h 5 HYPERLINK l _Toc317586755 2.3.2參照數(shù)據(jù)對象定義內(nèi)表 PAGEREF _Toc317586755 h 6 HYPERLINK l _Toc317586756 2.3.3其他定義形式 PAGEREF _Toc317586756 h 6 HYPERLINK l _Toc317586757 3內(nèi)表操作 PAGEREF _Toc317586757 h 7 HYPERLINK l _Toc317586758 3.1操作內(nèi)表行 PAGEREF _Toc317586758 h 7 HYPERLINK

4、 l _Toc317586759 3.1.1工作區(qū) PAGEREF _Toc317586759 h 7 HYPERLINK l _Toc317586760 3.1.2INSERT語句 PAGEREF _Toc317586760 h 7 HYPERLINK l _Toc317586761 3.1.3APPEND語句 PAGEREF _Toc317586761 h 16 HYPERLINK l _Toc317586762 3.1.4COLLECT語句 PAGEREF _Toc317586762 h 18 HYPERLINK l _Toc317586763 3.1.5READ語句 PAGEREF _

5、Toc317586763 h 19 HYPERLINK l _Toc317586764 3.1.6MODIFY語句 PAGEREF _Toc317586764 h 22 HYPERLINK l _Toc317586765 3.1.7DELETE語句 PAGEREF _Toc317586765 h 25 HYPERLINK l _Toc317586766 3.1.8LOOP語句 PAGEREF _Toc317586766 h 30 HYPERLINK l _Toc317586767 3.2整個內(nèi)表操作 PAGEREF _Toc317586767 h 30 HYPERLINK l _Toc3175

6、86768 3.2.1數(shù)據(jù)行排序 PAGEREF _Toc317586768 h 30 HYPERLINK l _Toc317586769 3.2.2初始化內(nèi)表 PAGEREF _Toc317586769 h 34 HYPERLINK l _Toc317586770 3.2.3整體復(fù)制內(nèi)表 PAGEREF _Toc317586770 h 37 HYPERLINK l _Toc317586771 3.2.4比較內(nèi)表大小 PAGEREF _Toc317586771 h 38 HYPERLINK l _Toc317586772 3.2.5控制級操作 PAGEREF _Toc317586772 h 3

7、9引言內(nèi)表是一種十分靈活的大批量數(shù)據(jù)管理形式,用于在程序運(yùn)行期間存儲多行結(jié)構(gòu)相同的數(shù)據(jù)。內(nèi)表的行結(jié)構(gòu)可以是一個簡單類型數(shù)據(jù),也可以是復(fù)雜的結(jié)構(gòu)體或內(nèi)表。而內(nèi)表的行數(shù)是動態(tài)的,添加數(shù)據(jù)后可以循環(huán)讀取每行數(shù)據(jù)或者整體操作。目的及范圍內(nèi)表的使用在SAP程序中相當(dāng)重要,因而ABAP中提供許多內(nèi)表處理語句,可以說沒有一個實(shí)際應(yīng)用程序中不需要使用到內(nèi)表,本文檔主要介紹如何使用內(nèi)表,可適用于ABAP開發(fā)人員,分析人員使用參考資料SAP程序設(shè)計(jì) 黃佳定義文檔結(jié)構(gòu)文檔的各章節(jié)介紹的內(nèi)容如下:第2節(jié)主要介紹內(nèi)表定義第3節(jié)介紹如何操作內(nèi)表 內(nèi)表介紹以下將講解在SAP中關(guān)于內(nèi)表的相關(guān)概念:內(nèi)表種類內(nèi)表種類決定了系統(tǒng)內(nèi)

8、部對內(nèi)表的處理以及ABAP對內(nèi)表行的訪問方式。在程序中對內(nèi)表種類的選擇應(yīng)取決于程序?qū)?nèi)表的操作方式、內(nèi)表大小以及訪問該內(nèi)表的頻率,因?yàn)樵趯ぶ凡煌愋蛢?nèi)表行的過程中,內(nèi)表種類的不同會帶來效率的差異。ABAP中有三種內(nèi)表類型:內(nèi)表類型表類型關(guān)鍵字訪問方式UNIQUE|NON-UNIQUE標(biāo)準(zhǔn)表STANDARD TABLE主要通過索引訪問, 可以通過關(guān)鍵字訪問不能用UNIQUE關(guān)鍵字,且無需特別指定NON-UNIQUE關(guān)鍵字排序表SORTED TABLE主要通過關(guān)鍵字訪問,也可以通過索引訪問可以用NON-UNIQUE或者UNIQUE關(guān)鍵字哈希表HASHED TABLE只能通過關(guān)鍵字訪問不能用NON-

9、UNIQUE關(guān)鍵字,且必須指定UNIQUE關(guān)鍵字內(nèi)表屬性屬性描述行結(jié)構(gòu)內(nèi)表行可以由任意類型的ABAP數(shù)據(jù)類型組成。一般說來,內(nèi)表的行類型大多是結(jié)構(gòu)體,或者是引用數(shù)據(jù)字典中的結(jié)構(gòu)形式,但由單個基本類型或者引用類型組成的數(shù)組也常常在程序中出現(xiàn)。如果內(nèi)表的行結(jié)構(gòu)中還包含有內(nèi)表類型,則可以構(gòu)造出十分復(fù)雜的數(shù)據(jù)結(jié)構(gòu)表關(guān)鍵字內(nèi)表的表關(guān)鍵字在訪問內(nèi)表和內(nèi)表排序的過程中起著相當(dāng)重要的作用,在內(nèi)表定義語句中,使用WITH KEY指定關(guān)鍵字,該項(xiàng)為可選項(xiàng),如果不指定,則系統(tǒng)會使用默認(rèn)(標(biāo)準(zhǔn))關(guān)鍵字。初始內(nèi)存大小在內(nèi)表數(shù)據(jù)的定義和聲明過程中,可以分為內(nèi)表分配初始內(nèi)存大?。篒NITIAL SIZE n 扁平結(jié)構(gòu)內(nèi)表的

10、默認(rèn)(標(biāo)準(zhǔn))表關(guān)鍵字是非數(shù)字和非內(nèi)表的組件字段。如果內(nèi)表的行是單個基本類型組成,則默認(rèn)關(guān)鍵字為整個行;如果內(nèi)表行中包含有內(nèi)表類型字段,則沒有默認(rèn)關(guān)鍵字。內(nèi)表定義定義一個內(nèi)表從本質(zhì)上可以分為兩種形式:參照數(shù)據(jù)類型定義內(nèi)表 數(shù)據(jù)類型通過關(guān)鍵字TYPES聲明:例如:聲明一個結(jié)構(gòu)類型typ_structTYPES:BEGINOFtyp_struct,name(20)TYPEc,ageTYPEi,ENDOFtyp_struct. 根據(jù)結(jié)構(gòu)類型typ_struct聲明一個內(nèi)表類型typ_itabTYPES:typ_itabTYPETABLEOFtyp_struct.則參數(shù)數(shù)據(jù)類型來定義一個內(nèi)表的語法如下表

11、格所示參照數(shù)據(jù)類型定義內(nèi)表時,要使用關(guān)鍵字TYPE,里的內(nèi)容表示可選DATA itabTYPEdata_itab(內(nèi)表類型)WITH NON-UNIQUE | UNIQUE KEY INITIAL SIZE nWITH HEADER LINE表頭TYPE TABLE OFdata_struct(結(jié)構(gòu)類型)WITH NON-UNIQUE | UNIQUE KEY INITIAL SIZE nWITH HEADER LINE表頭參照數(shù)據(jù)對象定義內(nèi)表有時為了方便,也可以直接參照數(shù)據(jù)對象來定義一個新的內(nèi)表,該內(nèi)表與參數(shù)內(nèi)表的行結(jié)構(gòu)一致,數(shù)據(jù)對象通過關(guān)鍵字DATA來聲明根據(jù)上面聲明的結(jié)構(gòu)類型來聲明一個內(nèi)

12、表對象和一個結(jié)構(gòu)對象,語法如下:DATA:data_itabTYPETABLEOFtyp_struct,data_struTYPEtyp_struct.參數(shù)數(shù)據(jù)對象定義內(nèi)表時,要使用關(guān)鍵字LIKEDATA itabLIKEdata_itab(內(nèi)表對象)WITH NON-UNIQUE | UNIQUE KEY INITIAL SIZE nWITH HEADER LINELIKE TABLE OFdata_struct(結(jié)構(gòu)對象)WITH NON-UNIQUE | UNIQUE KEY INITIAL SIZE nWITH HEADER LINE其他定義形式DATA:BEGIN OF itab_c

13、ompany OCCURS n, name(20) TYPE c, address(20) TYPE c, END OF itab_company.實(shí)際上這段語句也聲明了一個標(biāo)準(zhǔn)內(nèi)表,并分配初始內(nèi)存大小為n行,OCCURS是ABAP 3.0之前聲明內(nèi)表的關(guān)鍵字選項(xiàng),不建議使用,但由于有時系統(tǒng)維護(hù)時需要接觸舊的ABAP代碼,這里說明一下。內(nèi)表操作操作內(nèi)表行對內(nèi)表的操作分為數(shù)據(jù)行操作和整個內(nèi)表操作兩大類,行操作可以通過關(guān)鍵字或索引兩種途徑進(jìn)行,但哈希表不能通過索引操作。有時同樣的操作關(guān)鍵字語句,針對不同各類的內(nèi)表有不同的形式。行訪問方式通過關(guān)鍵字訪問行是所有類型內(nèi)表的通用操作形式:而索引操作則是通

14、過內(nèi)表內(nèi)部系統(tǒng)索引進(jìn)行的,因而不適用于哈希表,當(dāng)一個行操作語句執(zhí)行結(jié)束后,系統(tǒng)變量SY-TABIX將返回該行的索引。對于所有行操作,如果訪問成功,系統(tǒng)變量SY-SUBR返回0值,否則返回非0值,有時該值和特定的錯誤原因相關(guān)。工作區(qū)程序?qū)?nèi)表的行操作不能直接進(jìn)行,必須通過一種接口來傳輸,這個接口就是工作區(qū)(Work Area)。比如某程序需要從關(guān)系數(shù)據(jù)庫中提取數(shù)據(jù)到內(nèi)表各行中,必須先將數(shù)據(jù)講稿工作區(qū),然后把工作區(qū)中的數(shù)據(jù)賦給內(nèi)表的行。工作區(qū)必須具有和內(nèi)表行一致或者可相互轉(zhuǎn)換的數(shù)據(jù)結(jié)構(gòu)(一般是與內(nèi)表委類型相同的結(jié)構(gòu)體)。因此在定義內(nèi)表對象的同時,還需要定義一個與該內(nèi)表行結(jié)構(gòu)相同的工作區(qū)對象供程序使

15、用,將數(shù)據(jù)寫入內(nèi)表時,必須首先給工作區(qū)賦值,然后在工作區(qū)添加或者插入內(nèi)表。從內(nèi)表中讀取數(shù)據(jù)時,需要用已定位的內(nèi)表行內(nèi)容覆蓋工作區(qū)的內(nèi)容,然后再從程序中使用工作區(qū)的內(nèi)容表頭行:ABAP為程序員提供了一種簡單的方法:在創(chuàng)建內(nèi)表對象的同時可以隱式地定義一個同名工作區(qū),這個同名工作區(qū)就叫做表頭行或標(biāo)題行(Header Line),也稱作內(nèi)表工作區(qū)。因?yàn)楸眍^與內(nèi)表同名,很容易混淆,在實(shí)際程序中建議不要使用表頭行(Header Line),而是應(yīng)該總是聲明結(jié)構(gòu)相同的其他數(shù)據(jù)對象作為顯示工作區(qū)進(jìn)行內(nèi)表行操作。INSERT語句將新行插入到內(nèi)表中的指定位置,需要使用INSERT語句。對于索引表(標(biāo)準(zhǔn)表和排序表)

16、,可以指定某行的索引,則新行將插入該索引所代表的行之前;對于哈希表而言,不能指定行索引,系統(tǒng)會按照關(guān)鍵字將新行插入其特定位置。給內(nèi)表插入行可以為單行,也可以多行,甚至可把整個內(nèi)表的數(shù)據(jù)插入其它內(nèi)表中。語法介紹INSERT wa INTO itab INDEX n通過索引插入單行(如果內(nèi)表行數(shù)小于n-1,則操作失?。?,如果是排序表,插入的行不可以打亂按照關(guān)鍵字排序的順序,否則插入不成功INSERT wa | INITIAL LINE INTO TABLE itab (用INITIAL LINE代替工作區(qū),其效果是用行結(jié)構(gòu)中各類型的初始值組成數(shù)據(jù)添加到內(nèi)表中)一般性的插入單行的語法,注:此語句中增

17、加了TABLE關(guān)鍵字標(biāo)準(zhǔn)表:附加至表的最后一行,與APPEND語句效果完全一致;排序表:按照關(guān)鍵字升序排列后插入適當(dāng)位置哈希表:插入過程中系統(tǒng)會按照關(guān)鍵字進(jìn)行定位INSERT LINES OF itab1 FROM n1 TO n2INTO TABLE itab2 INDEX n如果不指定行數(shù),則將整個內(nèi)表itab1插入到itab2中,不指定行數(shù)時,itab1可以為任意表,itab2必須為索引表,如果指定行數(shù),則兩個表都必須是索引表。如果itab2前指定TABLE附加項(xiàng),則itab2可以是任意類型內(nèi)表。實(shí)例演示:創(chuàng)建內(nèi)表,分別為標(biāo)準(zhǔn)表、排序表和哈希表,填充相同的數(shù)據(jù),代碼和顯示結(jié)果如下:*&*

18、&ReportZCXT_ITAB_INSERT*&*&*&*&*&*REPORTzcxt_itab_insert.TYPES:BEGINOFtyp_struct,name(10)TYPEc,NUMBER(10)TYPEC,ENDOFtyp_struct.DATA:waTYPEtyp_struct,itabTYPESTANDARDTABLEOFtyp_structWITHKEYname,標(biāo)準(zhǔn)表itab_sTYPESORTEDTABLEOFtyp_structWITHNON-UNIQUEKEYname,排序表itab_hTYPEHASHEDTABLEOFtyp_structWITHUNIQUEKE

19、Yname.哈希表wa-name=A.wa-NUMBER=ONE.APPENDwaTOitab.APPENDwaTOitab_s.INSERTwaINTOTABLEitab_h.wa-name=C.wa-NUMBER=THREE.APPENDwaTOitab.APPENDwaTOitab_s.INSERTwaINTOTABLEitab_h.WRITE:/,NAME,NUMBER,LINES,/.ULINE.WRITE:標(biāo)準(zhǔn)表:.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.ULINE.WRITE:排序表:.LOOPATi

20、tab_sINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.ULINE.WRITE:哈希表:.LOOPATitab_hINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.三個內(nèi)表的顯示結(jié)果如下:NAME是主鍵NUMBER為數(shù)據(jù)編號LINES顯示的是展示行在內(nèi)表中行數(shù),即索引,可以看出,哈希表是沒有索引的(sy-tabix一直為0) 例:通過索引插入單行在標(biāo)準(zhǔn)表第二行插入數(shù)據(jù):D FOUR代碼如下:wa-name=D.wa-number=FOUR.INSERTwaINTOitabINDEX2.ULI

21、NE.WRITE:標(biāo)準(zhǔn)表:修改后.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.將此段代碼,添加到前面創(chuàng)建三個內(nèi)表的代碼后,執(zhí)行結(jié)果如下:數(shù)據(jù)插入成功,如果此處是把數(shù)據(jù)插入到排序表的第二行,則會出錯,因?yàn)榕判虮硎前搓P(guān)鍵字升序排列的,如果將數(shù)據(jù)插入到第二行,則順序變成A、D、C,打亂了排序表按關(guān)鍵字排列的順序(A,C,D),因此插入不成功,出錯。將上面標(biāo)準(zhǔn)表itab換成排序表itab_s,INSERTwaINTOitab_sINDEX2.則運(yùn)行結(jié)果為:另外,按索引向索引表插入數(shù)據(jù)時,如果索引n內(nèi)表行數(shù)+1,則會操作失敗,將

22、上面索引2修改為4,INSERTwaINTOitabINDEX4.則執(zhí)行結(jié)果為:插入數(shù)據(jù)失敗。例:一般性的插入單行分別向三種內(nèi)表插入數(shù)據(jù):B TWO代碼如下:wa-name=B.wa-number=TWO.INSERTwaINTOTABLEitab.INSERTwaINTOTABLEitab_s.INSERTwaINTOTABLEitab_h.SKIP.WRITE:=,/.WRITE:標(biāo)準(zhǔn)表:修改后.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.ULINE.WRITE:排序表:修改后.LOOPATitab_sINTOwa

23、.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.ULINE.WRITE:哈希表:修改后.LOOPATitab_hINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.將上面代碼添加到創(chuàng)建內(nèi)表的代碼后,執(zhí)行結(jié)果如下:對于標(biāo)準(zhǔn)表,此種插入相當(dāng)于APPEND附加到內(nèi)表末尾對于排序表,插入到按關(guān)鍵字排序的適當(dāng)位置對于哈希表,例:插入多條數(shù)據(jù)INSERT LINES OF itab1 INTO itab2 INDEX n:不指定行數(shù),將內(nèi)表itab1的所有行,插入到內(nèi)表itab2的指定行之后,使用INDEX時,排序表很

24、容易出錯,因此itab2以標(biāo)準(zhǔn)表為例:代碼如下:將哈希表的所有行從標(biāo)準(zhǔn)表的第二行開始插入INSERTlinesofitab_hINTOitabINDEX2.SKIP.WRITE:=,/.WRITE:標(biāo)準(zhǔn)表:修改后.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.將此代碼與內(nèi)表創(chuàng)建的代碼連接在一起,運(yùn)行結(jié)果如下:圖中標(biāo)識的數(shù)據(jù)為從哈希表插入到標(biāo)準(zhǔn)表中的數(shù)據(jù)INSERT LINES OF itab1 FROM n1 TO n2 INTO itab2 INDEX n:將內(nèi)表itab1的從n1(不指定的話從起始行)行到n2(不指定

25、的話到末尾行)行的數(shù)據(jù)從itab2的第n行開始插入,因?yàn)榇藭r指定行數(shù),要求itab1為索引表,不能使用哈希表。代碼如下:INSERTlinesofitab_sTO2INTOitabINDEX1.SKIP.WRITE:=,/.WRITE:標(biāo)準(zhǔn)表:修改后.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.將代碼與內(nèi)表創(chuàng)建代碼連接起來,運(yùn)行結(jié)果如下:排序表的從開始行到第二行之間的數(shù)據(jù)從標(biāo)準(zhǔn)表的第一行開始插入,圖中標(biāo)示出的數(shù)據(jù)為插入數(shù)據(jù)。注:當(dāng)n2大于內(nèi)表行數(shù)時,不會報(bào)錯,此時的n2相當(dāng)于最大行數(shù),但是如果n1取0,程序就會報(bào)錯。I

26、NSERT LINES OF itab1 INTO TABLE itab2:當(dāng)使用TABLE關(guān)鍵字時,不通用再使用INDEX關(guān)鍵字,此時內(nèi)表itab2即可以是索引表,也可以是非索引表。因?yàn)楣1碇械年P(guān)鍵字是唯一的,這里我們新建一個數(shù)據(jù)不同的內(nèi)表itab_new分別向標(biāo)準(zhǔn)、排序和哈希表中插入數(shù)據(jù)代碼如下:DATA:itab_newTYPETABLEOFtyp_struct.wa-name=B.wa-number=TWO.APPENDwaTOitab_new.wa-name=D.wa-number=FOUR.APPENDwaTOitab_new.INSERTlinesofitab_newINTOT

27、ABLEitab.INSERTlinesofitab_newINTOTABLEitab_s.INSERTlinesofitab_newINTOTABLEitab_h.SKIP.WRITE:=,/.WRITE:標(biāo)準(zhǔn)表:修改后.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.ULINE.WRITE:排序表:修改后.LOOPATitab_sINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.ULINE.WRITE:哈希表:修改后.LOOPATitab_hINTOwa.WRITE:/

28、,wa-name,wa-number,sy-tabix.ENDLOOP.將代碼與內(nèi)表創(chuàng)建部分連接起來,執(zhí)行結(jié)果分別如下:標(biāo)準(zhǔn)表:插入數(shù)據(jù)相當(dāng)于附加APPEND到內(nèi)表后排序表:數(shù)據(jù)按關(guān)鍵字升序排列后,再插入到內(nèi)表中哈希表:當(dāng)使用TABLE關(guān)鍵字時,可以向哈希表中插入數(shù)據(jù),不過要保證插入數(shù)據(jù)的關(guān)鍵字不與已存在數(shù)據(jù)重復(fù),否則操作失敗,程序會異常終止。APPEND語句附加行是在一個已對存在的索引表(該內(nèi)表可以為空)中使用APPEND語句增添新行。該語句只能操作索引表,哈希表不是以索引作為行的尋址方式,沒有系統(tǒng)索引,因而也就不能通過索引進(jìn)行附加操作。語法介紹APPEND wa | INITIAL LIN

29、E TO itab添加工作區(qū)內(nèi)空或默認(rèn)行到內(nèi)表itab中APPEND LINES OF itab1 FROM n1 TO n2 TO itab將內(nèi)表itab1的所有行或者部分行添加到內(nèi)表itab中例:附加單行數(shù)據(jù)代碼如下:將一行數(shù)據(jù)通過APPEND添加到內(nèi)表中,因?yàn)橥判虮碇刑砑訑?shù)據(jù)時,如果打亂了按關(guān)鍵字排序的順序,則會操作失敗,此處以標(biāo)準(zhǔn)表為例:wa-name=B.wa-number=TWO.APPENDwaTOitab.SKIP.WRITE:=,/.WRITE:標(biāo)準(zhǔn)表:修改后.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLO

30、OP.將代碼與內(nèi)表創(chuàng)建的代碼部分連接起來,執(zhí)行結(jié)果如下:如果此處用的是排序表,因?yàn)榘搓P(guān)鍵字順序?yàn)锳、C、B,不符合按關(guān)鍵字升序排列的要求,因此會報(bào)如下錯誤例:附加多行數(shù)據(jù)將排序表的多行數(shù)據(jù)添加到標(biāo)準(zhǔn)表中,同樣,因?yàn)橄蚺判蛴兄刑砑訑?shù)據(jù)很容易出現(xiàn)錯誤,此處仍以標(biāo)準(zhǔn)表為例,代碼如下:APPENDlinesofitab_sTOitab.SKIP.WRITE:=,/.WRITE:標(biāo)準(zhǔn)表:修改后.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.將代碼與內(nèi)表創(chuàng)建部分連接起來,執(zhí)行結(jié)果如下:注:APPEND語句中沒有TABLE關(guān)鍵字,對于

31、標(biāo)準(zhǔn)表而言,APPEND語句和帶TABLE關(guān)鍵字的INSERT語句效果是一致的。COLLECT語句由于索引表中行與行之間數(shù)據(jù)具有可重復(fù)性,如果使用APPEND語句附加行,則多個具有相同表關(guān)鍵字段值的數(shù)據(jù)行(甚至完全相同的數(shù)據(jù)行)可以同時存在于一個內(nèi)表對象中。如果希望在內(nèi)表中表關(guān)鍵字段能夠唯一性確定數(shù)據(jù)行(即有相同關(guān)鍵字段值的數(shù)據(jù)行不能重復(fù)出現(xiàn)),應(yīng)該使用COLLECT語句根據(jù)表關(guān)鍵字附加行,該操作可以應(yīng)用于所有種類的內(nèi)表,但是其效果與按照索引附加行是有區(qū)別的。語法:COLLECT wa INTO itab注:此處是用INTO關(guān)鍵字,APPEND語句中用的是TO適用范圍:內(nèi)表必須要扁平結(jié)構(gòu),工作

32、區(qū)懷內(nèi)表行類型兼容,所有非表關(guān)鍵字段必須是數(shù)據(jù)類型作用:當(dāng)使用COLLECT語句時,系統(tǒng)將檢查工作區(qū)中的標(biāo)準(zhǔn)關(guān)鍵字段值與已經(jīng)存在于內(nèi)表中的數(shù)據(jù)行是否相同。如果不同,COLLECT語句的作用與APPEND語句相似,將新行附加至內(nèi)表末尾。如果已存在相同表關(guān)鍵字的行,COLLECT語句不附加新行,而是將工作區(qū)中數(shù)據(jù)字段的內(nèi)容累加到已有數(shù)據(jù)行中數(shù)據(jù)字段內(nèi)容之上。例:COLLECT操作內(nèi)表此案例需要新建一個特殊的內(nèi)表,以標(biāo)準(zhǔn)表為例,代碼如下:TYPES:BEGINOFtyp_struct,name(10)TYPEc,numberTYPEi,ENDOFtyp_struct.DATA:waTYPEtyp_s

33、truct,itabTYPESTANDARDTABLEOFtyp_structWITHKEYname.標(biāo)準(zhǔn)表wa-name=ONE.wa-number=1.APPENDwaTOitab.wa-name=THREE.wa-number=3.APPENDwaTOitab.WRITE:標(biāo)準(zhǔn)表:.LOOPATITABINTOWA.WRITE:/,wa-name,wa-number.ENDLOOP.wa-name=TWO.wa-number=2.COLLECTWAINTOITAB.ULINE.WRITE:標(biāo)準(zhǔn)表:修改后.LOOPATITABINTOWA.WRITE:/,wa-name,wa-number

34、.ENDLOOP.執(zhí)行此段代碼,結(jié)果如下:因?yàn)殛P(guān)鍵字不同,COLLECT語句相當(dāng)于APPEND語句,附加一行數(shù)據(jù)如果將wa由TWO 2修改為ONE 2,則執(zhí)行結(jié)果如下:非表關(guān)鍵字行累加到了第一行,數(shù)值由1變成了3(1+2)。READ語句語法介紹READ TABLE itab INTO wa | ASSIGNING | TRANSPORTINGNOFIELDS INDEX n對于索引表,可以通過該語句讀取第n行數(shù)據(jù),如果指定工作區(qū),則將該行數(shù)據(jù)讀取到工作區(qū)中,如果選擇TRANSPORTINGNOFIELDS,將不讀取內(nèi)表到工作區(qū),有利于提高執(zhí)行效率READ TABLE itab FROM wa

35、INTO wa | ASSIGNING |TRANSPORTINGNOFIELDS此語法主要用于判斷內(nèi)表中是否包含工作區(qū)中的內(nèi)容,后面部分通常省略,若讀取成功,sy-subrc返回0,失敗則返回4,此語句不僅適用于索引表,對哈希表也適用READ TABLE itab WITH TABLE KEY k1=f1 k2=f2 INTO wa | ASSIGNING | TRANSPORTINGNOFIELDS 使用READ該死中通過關(guān)鍵字內(nèi)表行可以用于任何種類的內(nèi)表,是比用索引讀取更具普遍性的操作,該語句要指定內(nèi)表中的所有表關(guān)鍵字字段的值READ TABLE itab WITH KEY k1=f1

36、k2=f2 INTO wa | ASSIGNING | TRANSPORTINGNOFIELDS 該語句中的KEY列表可以為任意內(nèi)表字段,不一定是表關(guān)鍵字,讀取符合條件的第一條數(shù)據(jù)例:根據(jù)索引讀取內(nèi)表行讀取標(biāo)準(zhǔn)表的第二行數(shù)據(jù)到工作區(qū)并打印出來,代碼如下:READTABLEitabINTOwaINDEX2.SKIP.WRITE:=,/.WRITE:標(biāo)準(zhǔn)表的第二條數(shù)據(jù)為:.WRITE:/,wa-name,wa-number,sy-tabix.將代碼與內(nèi)表創(chuàng)建部分代碼連接在一起,執(zhí)行結(jié)果如下:例:按工作區(qū)讀取內(nèi)表行判斷內(nèi)表中是否包含工作區(qū)內(nèi)容,讀取成功sy-subrc返回0,失敗返回4。代碼如下:w

37、a-name=A.wa-number=ONE.SKIP.WRITE:=,/.READTABLEitabFROMwaINTOwa.IFsy-subrc=0.WRITE:標(biāo)準(zhǔn)表中包含該工作區(qū)的數(shù)據(jù):.WRITE:/,wa-name,wa-number,sy-subrc=,sy-subrc.ENDIF.將代碼與創(chuàng)建內(nèi)表的代碼連接起來,執(zhí)行結(jié)果如下:sy-subrc返回值為0,讀取成功,表明準(zhǔn)備表中包含工作區(qū)的數(shù)據(jù)。如果讀取失敗的話,sy-subrc則會返回值4。例:根據(jù)關(guān)鍵字讀取內(nèi)表行讀取哈希表中name為A的數(shù)據(jù)到工作區(qū),并打印,代碼如下:SKIP.WRITE:=,/.READTABLEitab_

38、hWITHTABLEKEYname=AINTOwa.IFsy-subrc=0.WRITE:哈希表中包含name為A的數(shù)據(jù):.WRITE:/,wa-name,wa-number,sy-tabix.ELSE.WRITE:/,sy-subrc.ENDIF.將代碼與內(nèi)表定義部分連接起來,執(zhí)行結(jié)果如下:例:根據(jù)任意字段讀取內(nèi)表行讀取標(biāo)準(zhǔn)表中,number 為THREE的數(shù)據(jù)行,代碼如下:SKIP.WRITE:=,/.READTABLEitabWITHKEYnumber=THREEINTOwa.IFsy-subrc=0.WRITE:標(biāo)準(zhǔn)表中包含number為THREE的數(shù)據(jù):.WRITE:/,wa-nam

39、e,wa-number,sy-tabix.ELSE.WRITE:/,sy-subrc.ENDIF.將代碼與內(nèi)表定義部分連接起來,執(zhí)行結(jié)果如下:MODIFY語句使用MODIFY語句更改內(nèi)表的數(shù)據(jù)行可以通過索引或者關(guān)鍵字進(jìn)行語法介紹MODIFY itab RROM wa INDEX n TRANSPORTING f1 f2.該語句使用FROM選項(xiàng)中指定的工作區(qū)wa代替itab中索引為n的現(xiàn)在行,如果內(nèi)表行數(shù)少于n,則不更改任何行,如果指定TRANSPORTING選項(xiàng),則只修改指定字段的值MODIFY TABLE itab FROM wa TRANSPORTING f1 f2.使用表關(guān)鍵字來更改內(nèi)表

40、行可以應(yīng)用于所有類型的內(nèi)表,該語句中itab之前需要添加TABLE關(guān)鍵字,修改的是關(guān)鍵字以外的字段值。MODIFY itab FROM wa TRANSPORTING f1 f2WHERE condition該語句中沒有TABLE關(guān)鍵字,另外就是TRANSPORTING選項(xiàng)是必須的,指明要修改的字段,然而對于哈希表和排序表,只能修改非關(guān)鍵字段的值,即只有非關(guān)鍵字段才可以出現(xiàn)在f1中,標(biāo)準(zhǔn)表所有字段都可以修改。例:根據(jù)索引修改內(nèi)表行根據(jù)索引修改內(nèi)表數(shù)據(jù),如果是排序表,很可能因?yàn)樾薷臄?shù)據(jù)時無法保證數(shù)據(jù)按關(guān)鍵字升序排列而導(dǎo)致操作失敗,這里采用標(biāo)準(zhǔn)表為例,根據(jù)工作區(qū)內(nèi)容修改標(biāo)準(zhǔn)表的第一行數(shù)據(jù),代碼如下

41、:SKIP.WRITE:=,/.wa-name=D.wa-number=FOUR.MODIFYitabFROMwaINDEX1.IFsy-subrc=0.WRITE:標(biāo)準(zhǔn)表:修改后:.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.ELSE.WRITE:/,sy-subrc.ENDIF.將代碼與內(nèi)表定義部分連接起來,執(zhí)行結(jié)果如下:兩個字段的值都根據(jù)工作區(qū)修改了(如果修改的是排序表,則此操作會出錯,因?yàn)镈、C不是按升序排列的)如果在MODIFY語句中指定TRANSPORTING選項(xiàng),指定修改字段為number:MODIFYi

42、tabFROMwaINDEX1TRANSPORTINGnumber.則執(zhí)行結(jié)果如下:只有number字段的值被修改了。例:根據(jù)關(guān)鍵字修改內(nèi)表行根據(jù)關(guān)鍵字把工作區(qū)中的非關(guān)鍵字字段值更新到該關(guān)鍵字所在行(因?yàn)椴恍薷年P(guān)鍵字段值,不會影響數(shù)據(jù)排序),以排序表為例,代碼如下:SKIP.WRITE:=,/.wa-name=C.wa-number=FOUR.MODIFYTABLEitab_sFROMwa.IFsy-subrc=0.WRITE:排序表:修改后:.LOOPATitab_sINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.ELSE.WRITE:/,

43、sy-subrc.ENDIF.將代碼與內(nèi)表創(chuàng)建部分連接起來,執(zhí)行結(jié)果如下:字段number值由THREE被修改為 FOUR例:根據(jù)條件修改多行數(shù)據(jù)把哈希表中name小于X的數(shù)據(jù)行的number修改為工作區(qū)中內(nèi)容(哈希表不允許修改關(guān)鍵字段),代碼如下:SKIP.WRITE:=,/.wa-name=D.wa-number=FOUR.MODIFYitab_hFROMwaTRANSPORTINGnumberWHEREnameX.IFsy-subrc=0.WRITE:哈希表:修改后:.LOOPATitab_hINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOO

44、P.ELSE.WRITE:/,sy-subrc.ENDIF.將代碼與內(nèi)表定義部分連接起來,執(zhí)行結(jié)果如下:哈希表中兩行數(shù)據(jù)的number值都被修改為FOUR了。DELETE語句語法介紹DELETE itab INDEX n對于索引表,可以使用該語句通過索引刪除行,該語句從內(nèi)表itab中刪除索引為n的行,刪除成功后,下面所有行的索引減1,操作成功,sy-subrc返回0,失敗則返回4.DELETE TABLE itab FROM wa根據(jù)關(guān)鍵字刪除單行,需要指明TABLE關(guān)鍵字DELETE TABLE itab WITH TABLE KEY k1=f1 ki=fi根據(jù)關(guān)鍵字刪除單行,需要指明TAB

45、LE關(guān)鍵字DELETE itab FROM n1 TO n2根據(jù)索引值刪除索引為n1到n2之間的多行數(shù)據(jù),如果不指定FROM和TO選項(xiàng),則刪除內(nèi)表所有數(shù)據(jù)。DELETE itab WHERE condition根據(jù)WHERE條件刪除滿足條件的多行數(shù)據(jù),若不指定WHERE選項(xiàng),則刪除內(nèi)表所有數(shù)據(jù)。DELETEADJACENTDUPLICATESFROMitab刪除內(nèi)表中的重復(fù)行,使用該語句之前,操作內(nèi)表必須要先排序例:根據(jù)索引刪除單行刪除標(biāo)準(zhǔn)表的第一行數(shù)據(jù),代碼如下:SKIP.WRITE:=,/.DELETEitabINDEX1.IFsy-subrc=0.WRITE:標(biāo)準(zhǔn)表:修改后.LOOPAT

46、itabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.ELSE.WRITE:/,sy-subrc.ENDIF.將代碼與內(nèi)表定義部分連接起來,執(zhí)行結(jié)果如下:操作前:操作后例:根據(jù)關(guān)鍵字刪除單行分別用兩種語法根據(jù)關(guān)鍵字刪除標(biāo)準(zhǔn)表和排序表中name 為C的數(shù)據(jù)行,代碼如下:SKIP.WRITE:=,/.wa-name=C.DELETETABLEitabFROMwa.DELETETABLEitab_sWITHTABLEKEYname=C.IFsy-subrc=0.WRITE:標(biāo)準(zhǔn)表:修改后.LOOPATitabINTOwa.WRITE:/,wa-n

47、ame,wa-number,sy-tabix.ENDLOOP.ULINE.WRITE:排序表:修改后.LOOPATitab_sINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.ELSE.WRITE:/,sy-subrc.ENDIF.將代碼與內(nèi)表定義部分連接起來,執(zhí)行結(jié)果如下:刪除成功,兩種方法都能夠?qū)崿F(xiàn)根據(jù)關(guān)鍵字刪除指定關(guān)鍵字所在的行(第一個滿足條件的)。例:根據(jù)索引刪除多行刪除標(biāo)準(zhǔn)表中的索引值在1-2的所有數(shù)據(jù),代碼如下:SKIP.WRITE:=,/.DELETEitabFROM1TO2.IFsy-subrc=0.WRITE:標(biāo)準(zhǔn)表:修改后.

48、LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.ELSE.WRITE:/,sy-subrc.ENDIF.將代碼與內(nèi)表定義部分連接起來,執(zhí)行結(jié)果如下:標(biāo)準(zhǔn)表中索引為1和2的數(shù)據(jù)都被刪除了。例:根據(jù)條件刪除多行刪除哈希表中,滿足name小于X的數(shù)據(jù)行,代碼如下:SKIP.WRITE:=,/.DELETEitab_hWHEREnameX.IFsy-subrc=0.WRITE:哈希表:修改后.LOOPATitab_hINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.ELSE.WRI

49、TE:/,sy-subrc.ENDIF.將代碼與內(nèi)表定義部分連接起來,執(zhí)行結(jié)果如下:哈希表中name小于X的兩行數(shù)據(jù)都被刪除了。例:刪除內(nèi)表重復(fù)行向標(biāo)準(zhǔn)表中添加多條重復(fù)數(shù)據(jù),排序(默認(rèn)升)后,刪除重復(fù)數(shù)據(jù),代碼如下:ULINE.wa-name=A.wa-number=ONE.INSERTwaINTOTABLEitab.wa-name=C.wa-number=THREE.INSERTwaINTOTABLEitab.WRITE:排序前:.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.SORTITAB.WRITE:/,排序后:

50、.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.DELETEADJACENTDUPLICATESFROMitab.WRITE:/,去重后:.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.將代碼與內(nèi)表定義部分連接起來,執(zhí)行結(jié)果如下:LOOP語句LOOP語句可以逐行讀取內(nèi)表內(nèi)容,其循環(huán)順序?yàn)閮?nèi)表中數(shù)據(jù)行的排列次序。語法介紹LOOP AT itabINTO waFROM n1TO n2n1和n2是索引,有時候使用該選項(xiàng)可以避免遍歷內(nèi)表,對提高性能有著很重

51、要的意義將內(nèi)表內(nèi)容讀取到目標(biāo)工作區(qū)ASSIGNING WHERE condition將該內(nèi)表數(shù)據(jù)行分配給字段符號TRANSPORTING NO FIELDS循環(huán)時不進(jìn)行任何數(shù)據(jù)讀取操作,一般只用于計(jì)算內(nèi)表大小或滿足特定條件的行數(shù)END LOOP循環(huán)打印內(nèi)表行數(shù)據(jù):在內(nèi)表定義中有關(guān)于內(nèi)表輸入的語句,就用到了LOOP循環(huán)語句,代碼如下:LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.帶FROM n1 TO n2的循環(huán)語句,代碼如下:LOOPATitabINTOwa FROM 1 TO 2.WRITE:/,wa-name,wa-

52、number,sy-tabix.ENDLOOP.該語句不會遍歷內(nèi)表所有行,只打印內(nèi)表從1至2行。整個內(nèi)表操作內(nèi)表的整體操作包括內(nèi)表之間的賦值、內(nèi)表數(shù)據(jù)行排序、整體清空等操作。數(shù)據(jù)行排序語法介紹SORT itabASCENDING|DESCENDINGBY f1 ASCENDING|DESCENDING fn ASCENDING|DESCENDINGAS TEXTSTABLE(無效)如果不使用BY選項(xiàng),則根據(jù)表關(guān)鍵字對內(nèi)表進(jìn)行排序(默認(rèn)為升序排序)【可選】:該選項(xiàng)指定升序或降序排列,如果不指定,默認(rèn)為所有字段升序排列。該選項(xiàng)的作用范圍是整個語句【可選】: 該選項(xiàng)指定組件字段對數(shù)據(jù)行進(jìn)行排序,如果

53、指定多個字段,則系統(tǒng)按照其次序f1、f2對數(shù)據(jù)條目進(jìn)行排序。關(guān)鍵字越少,排序效率越高。如果在該選項(xiàng)中指定ASCENDING|DESCENDING選項(xiàng),則作用范圍是該字段,并可能覆蓋選項(xiàng)在BY之前的指定【可選】:該選項(xiàng)將影響字符字段的排序方式。如果沒有該選項(xiàng),則系統(tǒng)按字符平臺相關(guān)內(nèi)部編碼進(jìn)行排序:反之系統(tǒng)根據(jù)當(dāng)前語言按字母順序排序字符字段。例:指定升序與降序按降序?qū)?biāo)準(zhǔn)表進(jìn)行排序并打印排序結(jié)果,代碼如下:SKIP.WRITE:=,/.SORTitabDESCENDING.IFsy-subrc=0.WRITE:標(biāo)準(zhǔn)表:降序排列.LOOPATitabINTOwa.WRITE:/,wa-name,wa

54、-number,sy-tabix.ENDLOOP.ELSE.WRITE:/,sy-subrc.ENDIF.將代碼與內(nèi)表定義部分連接,執(zhí)行程序,結(jié)果如下圖所示:默認(rèn)按關(guān)鍵字進(jìn)行降序排序C、A例:指定BY選項(xiàng)為標(biāo)準(zhǔn)表添加一行新數(shù)據(jù) D FOUR,按字段number進(jìn)行降序排序,代碼如下:wa-name=D.wa-number=FOUR.ULINE.WRITE:標(biāo)準(zhǔn)表:排序前.APPENDwaTOitab.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.SKIP.WRITE:=,/.SORTitabASCENDINGBYnumb

55、er.IFsy-subrc=0.WRITE:標(biāo)準(zhǔn)表:排序后.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.ELSE.WRITE:/,sy-subrc.ENDIF.將代碼與內(nèi)表定義部分連接起來,執(zhí)行程序,結(jié)果如下:相似的,也可以在BY number后指定ASCENDING|DESCENDING關(guān)鍵字,此時降序與升序只影響該字段,而在BY之前指定ASCENDING|DESCENDING選項(xiàng)的話,則BY后的字段都受影響,但是如果BY后面的字段也附加ASCENDING|DESCENDING選項(xiàng)的話,可能覆蓋選項(xiàng)在BY之前的指定。

56、將排序語句修改為SORTitabASCENDINGBYnumberDESCENDING. 升序排列 降序排序執(zhí)行結(jié)果為:雖然BY之前指定了升序排序,但nunber之后的指定會覆蓋前面的指定,實(shí)際則是按降序排序的。例:指定AS TEXT選項(xiàng)給標(biāo)準(zhǔn)表添加一行新數(shù)據(jù)b TWO,按name進(jìn)行升序排序,代碼如下:wa-name=b.wa-number=TWO.ULINE.WRITE:標(biāo)準(zhǔn)表:排序前.APPENDwaTOitab.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.SKIP.WRITE:=,/.SORTitabASCEN

57、DINGBYname.IFsy-subrc=0.WRITE:標(biāo)準(zhǔn)表:排序后.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.ELSE.WRITE:/,sy-subrc.ENDIF.將代碼與內(nèi)表定義部分連接起來,執(zhí)行結(jié)果如下:在字母編碼中,小寫字母是在大寫字母之后的,因此b是按在C后面的,但如果指定選項(xiàng)AS TEXT,將排序語句修改為SORTitabASCENDINGBYnameASTEXT.則執(zhí)行結(jié)果如下:由結(jié)果可以看出,當(dāng)指定選項(xiàng)AS TEXT后,排序時是按字母順序排的,不按內(nèi)部編碼順序。初始化內(nèi)表 初始化內(nèi)表的作用是清

58、空內(nèi)表所有的數(shù)據(jù)行,將內(nèi)表恢復(fù)到填充或賦值之前的狀態(tài)。初始化內(nèi)表過程中需要注意之處仍然是初始化無表頭行內(nèi)表和有表頭行內(nèi)表的區(qū)別,以及初始化內(nèi)表和表頭行的區(qū)別。CLEAR語句CLEAR itab.該語句將內(nèi)表重置為填充前的狀態(tài),這意味著該內(nèi)表將不包含任何行。然而如果內(nèi)表有表頭行,會同時清空內(nèi)表數(shù)據(jù)行和表頭行的內(nèi)容。如果希望只初始化內(nèi)表本身,保留表頭行的內(nèi)容,應(yīng)該使用如下形式:CLEAR itab.因?yàn)樵趯?shí)際應(yīng)用中,帶表頭的內(nèi)表很容易與表頭混淆,一般要求定義工作區(qū),不使用表頭,初始化標(biāo)準(zhǔn)表,代碼如下:SKIP.WRITE:=,/.CLEARitab.IFsy-subrc=0.WRITE:標(biāo)準(zhǔn)表:初

59、始化后.LOOPATitabINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.ELSE.WRITE:/,sy-subrc.ENDIF.將代碼與數(shù)據(jù)定義部分連接起來,執(zhí)行結(jié)果如下:數(shù)據(jù)被清空了。注:在BAPI(FM)中,處理TABLES參數(shù)時,如果使用CLEAR對TABLES參數(shù)進(jìn)行初始化,只能清空其表頭內(nèi)容,并沒有對整個表進(jìn)行初始化,這個操作是與本地的內(nèi)表完成不一樣的,要格外注意,所以要初始化這樣的內(nèi)表要加。REFRESH語句REFRESH語句只初始化內(nèi)表本身,不會將表頭行中的內(nèi)容清空,從結(jié)果上看,REFRESH itab相當(dāng)于CLEAR it

60、ab.初始化排序表,代碼如下:SKIP.WRITE:=,/.REFRESHitab_s.IFsy-subrc=0.WRITE:排序表:初始化后.LOOPATitab_sINTOwa.WRITE:/,wa-name,wa-number,sy-tabix.ENDLOOP.ELSE.WRITE:/,sy-subrc.ENDIF.將代碼與內(nèi)表定義部分連接起來,執(zhí)行結(jié)果如下:FREE語句使用REFRESH或CLEAR初始化內(nèi)表后,系統(tǒng)仍保持在內(nèi)存中為內(nèi)表預(yù)留的空間,或以用FREE語句釋放該內(nèi)存,語法如下:FREE itab.使用FREE語句可以重置內(nèi)表并同時釋放其內(nèi)存,而不必先使用REFRESH或CLE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論