版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Good is good, but better carries it.精益求精,善益求善。SAP ABAP 動態(tài)語句詳解-tc將數(shù)據(jù)對象分配給字段符號l2將數(shù)據(jù)對象分配給字段符號在使用字段符號之前必須先分配數(shù)據(jù)對象給它。對于結(jié)構(gòu)化字段符號,必須在定義中包括這個分配(參見定義結(jié)構(gòu)化字段符號)。對于非結(jié)構(gòu)化字段符號,可以自由決定何時何地首次分配數(shù)據(jù)對象。在程序中,不管字段符號是否結(jié)構(gòu)化,都可以將不同的數(shù)據(jù)對象分配給同樣的字段符號。要給字段符號分配數(shù)據(jù)對象,可以使用ASSIGN語句。ASSIGN語句有幾個變量和參數(shù)。下列主題說明:ASSIGN語句的基本格式將字段符號分配給其它字段符號分配字段串組件
2、定義字段符號的數(shù)據(jù)類型更改小數(shù)位分配全局字段的局部副本tcASSIGN語句的基本格式l2ASSIGN語句的基本格式ASSIGN語句的基本格式包含兩個靜態(tài)變量和兩個動態(tài)變量。靜態(tài)ASSIGN具有偏移量說明的靜態(tài)ASSIGN動態(tài)ASSIGN表工作區(qū)的動態(tài)分配tc靜態(tài)ASSIGNl2xeASSIGNxe字段符號,靜態(tài)分配靜態(tài)ASSIGN如果運(yùn)行之前知道想要分配給字段符號的數(shù)據(jù)對象的名稱,則如下使用ASSIGN語句:語法ASSIGNTO.分配之后,字段符號具有數(shù)據(jù)對象的屬性,并指向相同的內(nèi)存區(qū)。FIELD-SYMBOLS:,TYPEI.DATA:TEXT(20)TYPECVALUEHello,howa
3、reyou?,NUMTYPEIVALUE5,BEGINOFLINE1,COL1TYPEFVALUE1.1e+10,COL2TYPEIVALUE1234,ENDOFLINE1,LINE2LIKELINE1.ASSIGNTEXTTO.ASSIGNNUMTO.DESCRIBEFIELDLENGTH.WRITE:/,haslength,NUM.ASSIGNLINE1TO.ASSIGNLINE2-COL2TO.MOVETOLINE2.ASSIGNLINE2-COL2=TO.WRITE:/,.輸出如下:Hello,howareyou?haslength20LINE-COL2=1,234示例定義兩個字段符號
4、和。因?yàn)榈念愋椭付镮,它只能指向I類型字段。在示例教程中和指向幾個不同的數(shù)據(jù)對象。tc具有偏移量說明的靜態(tài)ASSIGNl2具有偏移量說明的靜態(tài)ASSIGN通過使用下列ASSIGN語句,可以指定要分配給字段符號的字段的偏移值:語法:ASSIGN+()TO.正如在指定數(shù)據(jù)對象的偏移量中所描述的,具有偏移量和長度的部分被分配給字段符號。在ASSIGN語句中,偏移量的說明有下列特殊特征:和可以是變量系統(tǒng)不檢查所選部分是否位于字段內(nèi)部。偏移量和長度都可以比的長度大。寫地址時,可以超出的限制,但不能超出所定義內(nèi)存區(qū)(參見運(yùn)行檢查)。如果沒有指定長度,系統(tǒng)自動輸入字段的長度。如果大于零,總是指向超出限制的
5、區(qū)域。如果小于的長度,可以為指定一個星號(*)來阻止參照限制之外的區(qū)域。FIELD-SYMBOLS.DATA:BEGINOFLINE,STRING1(10)VALUE0123456789,STRING2(10)VALUEabcdefghij,ENDOFLINE.WRITE/LINE-STRING1+5.ASSIGNLINE-STRING1+5TO.WRITE/.ASSIGNLINE-STRING1+5(*)TO.WRITE/.輸出如下:5678956789abcde56789該示例中,可以看到WRITE語句和ASSIGN語句中的偏移量說明的區(qū)別。對于WRITE,在LINE-STRING1端部截
6、短了輸出。如果指定偏移量大于9,將導(dǎo)致語法檢查時出錯。在第一個ASSIGN語句中,將LINE-STRING1中以偏移量5開頭長度為10的內(nèi)存區(qū)域分配給字段符號。因?yàn)槌绦蛑忻鞔_定義了LINE-STRING1后面的內(nèi)存區(qū),所以這將導(dǎo)致很有意義的輸出結(jié)果。在第二個ASSIGN語句中,避免了LINE-STRING1邊界后面的內(nèi)存分配。FIELD-SYMBOLS.DATA:BEGINOFLINE,AVALUE1,BVALUE2,CVALUE3,DVALUE4,EVALUE5,FVALUE6,GVALUE7,HVALUE8,ENDOFLINE,OFFTYPEI,LENTYPEIVALUE2.DO2TIME
7、S.OFF=SY-INDEX*3.ASSIGNLINE-A+OFF(LEN)TO.=XX.ENDDO.DO8TIMES.OFF=SY-INDEX-1.ASSIGNLINE-A+OFF(1)TO.WRITE.ENDDO.輸出如下:123XX6XX該示例中,可以看到字段符號是如何方便訪問和規(guī)則字段串的處理的。然而,請注意,這種處理字段限制范圍之外內(nèi)存內(nèi)容的靈活方法也有其危險性,可能導(dǎo)致運(yùn)行錯誤。tc動態(tài)ASSIGNl2動態(tài)ASSIGN如果僅在運(yùn)行時才知道要分配給字段符號的數(shù)據(jù)對象名稱,請使用下列ASSIGN語句:語法ASSIGN()TO.這個語句將名稱包含在中的字段分配給字段符號。對()不能指定偏
8、移量。運(yùn)行時,系統(tǒng)按下列順序搜索給定的字段:1.如果分配是在子程序或功能模塊中執(zhí)行的,系統(tǒng)將在局部數(shù)據(jù)的子程序或功能模塊中搜索字段。2.如果分配是在子程序或功能模塊之外執(zhí)行的,或者在其中未找到字段,則系統(tǒng)將在程序的全局?jǐn)?shù)據(jù)中搜索字段。3.如果在全局?jǐn)?shù)據(jù)中未發(fā)現(xiàn)此字段,系統(tǒng)將在表工作區(qū)中搜索,該表工作區(qū)是指當(dāng)前程序組的主程序中TABLES語句聲明的表工作區(qū)。程序組由主程序和包含外部子程序的定義的所有程序組成,這些外部子程序被主程序調(diào)用(包括被嵌套的程序)。由于這種搜索對響應(yīng)時間有負(fù)面效應(yīng),只有絕對必要時,才可使用動態(tài)ASSIGN。如果在運(yùn)行之前知道只分配表工作區(qū),則可以使用在表工作區(qū)的動態(tài)分配中
9、所描述的ASSIGN語句的變量。如果搜索成功并且字段可分配給字段符號,則SY-SUBRC設(shè)為0。否則,返回4。為安全起見,動態(tài)ASSIGN之后總要檢查SY-SUBRC的值,以避免字段符號指向未定義區(qū)域。假設(shè)主程序SAPMZTST如下:PROGRAMSAPMZTST.TABLESSBOOK.SBOOK-FLDATE=SY-DATUM.PERFORMFORM1(MYFORMS1).假設(shè)還調(diào)用兩個程序MYFORMS1和MYFORMS2:PROGRAMMYFORMS1.FORMFORM1.PERFORMFORM2(MYFORMS2).ENDFORM.和PROGRAMMYFORMS2.FORMFORM2
10、.DATANAME(20)VALUESBOOK-FLDATE.FIELD-SYMBOLS.ASSIGN(NAME)TO.IFSY-SUBRCEQ0.WRITE/.ENDIF.ENDFORM.執(zhí)行SAPMZTST之后,輸出顯示如下:08.02.1995該示例中,程序組由SAPMZTST、MYFORMS1和MYFORMS2組成。在MYFORMS2中定義字段符號。動態(tài)ASSIGN語句之后,指向主程序SAPMZTST中聲明的表工作區(qū)的組件FLDATE。用靜態(tài)ASSIGN語句,這是不可能的。換句話說,不能用SBOOK-FLDATE替代(NAME),因?yàn)檎Z法檢查時將導(dǎo)致錯誤。createdwithHelp
11、toRTFfileformatconvertertc表工作區(qū)的動態(tài)分配l2xeASSIGNxe字段符號,動態(tài)分配表工作區(qū)域表工作區(qū)的動態(tài)分配如果運(yùn)行之前知道要將表工作區(qū)分配給字段符號,但不知道表區(qū)的名稱,請使用動態(tài)ASSIGN語句的下列變量:語法ASSIGNTABLEFIELD()TO.系統(tǒng)僅在表工作區(qū)中搜索要分配給字段符號的數(shù)據(jù)對象,該表工作區(qū)是由當(dāng)前程序組的主程序中TABLES語句聲明的。即,系統(tǒng)僅執(zhí)行在動態(tài)ASSIGN所描述的搜索的第三步。如果搜索成功,并且可以分配字段給字段符號,則SY-SUBRC設(shè)為0。否則返回4。TABLESSBOOK.DATA:NAME1(20)VALUESBOO
12、K-FLDATE,NAME2(20)VALUENAME1.FIELD-SYMBOLS.ASSIGNTABLEFIELD(NAME1)TO.WRITE:/SY-SUBRC:,SY-SUBRC.ASSIGNTABLEFIELD(NAME2)TO.WRITE:/SY-SUBRC:,SY-SUBRC.輸出如下:SY-SUBRC:0SY-SUBRC:4在第一個ASSIGN語句中,系統(tǒng)發(fā)現(xiàn)表工作區(qū)SBOOK和SY-SUBRC的組件FLDATE被設(shè)為0。第二個ASSIGN語句中,系統(tǒng)沒有發(fā)現(xiàn)字段NAME1,因?yàn)樗槐籇ATA語句聲明,而不是被TABLES語句聲明。在這種情形,SY-SUBRC返回4。tc將字
13、段符號分配給其它字段符號l2將字段符號分配給其它字段符號除了使用數(shù)據(jù)對象的名稱外,還可以將字段符號分配給ASSIGN語句的所有變量中的字段符號。為此,編碼靜態(tài)ASSIGN如下:語法ASSIGN+()TO.可按下列方式編碼動態(tài)ASSIGN:語法ASSIGNTABLEFIELD()TO.字段包含字段符號的名稱。和可以相同。DATA:BEGINOFS,AVALUE1,BVALUE2,CVALUE3,DVALUE4,EVALUE5,FVALUE6,GVALUE7,HVALUE8,ENDOFS.DATAOFFTYPEI.FIELD-SYMBOLS.ASSIGNS-ATO.DO4TIMES.OFF=SY-
14、INDEX-1.ASSIGN+OFF(1)TO.WRITE.ENDDO.輸出如下:1247該示例中,創(chuàng)建八個字段作為字符串S的組件S-A到S-H,并用“1”到“8”填充。這些字符串在內(nèi)存中有規(guī)律的存儲。組件S-A初始分配給字段符號。循環(huán)語句中有下列結(jié)果:循環(huán)途徑1:指向S-A,OFF為0,并且S-A被分配給循環(huán)途徑2:指向S-A,OFF為1,并且S-B被分配給循環(huán)途徑3:指向S-B,OFF為2,并且S-D被分配到循環(huán)途徑4:指向S-D,OFF為3,并且S-G被分配給tc分配字段串組件l2分配字段串組件可以用ASSIGN語句將字段串的特殊組件分配給字段符號,過程如下:語法ASSIGNCOMPON
15、ENTOFSTRUCTURETO.系統(tǒng)將字符串的組件分配給字段符號。可以指定為文字或變量。如果屬于類型C或字段串(象組件一樣沒有內(nèi)表),它指定組件的名稱。如果有任何其它基本數(shù)據(jù)類型,將被轉(zhuǎn)化為類型I(參見類型轉(zhuǎn)換),并且指定組件號。如果分配成功,SY-SUBRC設(shè)為0。否則,返回4。DATA:BEGINOFLINE,COL1TYPEIVALUE11,COL2TYPEIVALUE22,COL3TYPEIVALUE33,ENDOFLINE.DATACOMP(5)VALUECOL3.FIELD-SYMBOLS:,.ASSIGNLINETO.ASSIGNCOMPTO.DO3TIMES.ASSIGNCO
16、MPONENTSY-INDEXOFSTRUCTURETO.WRITE.ENDDO.ASSIGNCOMPONENTOFSTRUCTURETO.WRITE/.輸出如下:11223333該示例中,指向字段串LINE,指向字段COMP。循環(huán)中,LINE的組件由其號碼指定,并且一個接一個地被分配到。循環(huán)之后,LINE的組件COL3由其名稱指定,并被分配到。tc定義字段符號的數(shù)據(jù)類型l2xeASSIGNxe字段符號,定義類型xe字段符號,實(shí)際數(shù)據(jù)類型定義字段符號的數(shù)據(jù)類型可以使用ASSIGN語句的TYPE選項(xiàng)定義字段符號的數(shù)據(jù)類型,過程如下:語法ASSIGN.TOTYPE.可以用ASSIGN語句的所有變量
17、使用TYPE選項(xiàng)。分配數(shù)據(jù)對象給帶類型說明的字段符號時,必須區(qū)分下列符號:未定義類型的字段符號對于TYPE,未定義類型的字段符號不繼承所分配數(shù)據(jù)對象的數(shù)據(jù)類型和輸出長度,但繼承在中指定的數(shù)據(jù)類型。對于,可以使用任何預(yù)定義的數(shù)據(jù)類型(參見基本數(shù)據(jù)類型-預(yù)定義的)。關(guān)于預(yù)定義基本數(shù)據(jù)類型輸出長度的詳細(xì)信息,參見WRITE語句。類型可以是文字或變量。定義類型的字段符號如果要分配的數(shù)據(jù)對象的數(shù)據(jù)類型與字段符號的鍵入類型不兼容,使用具有定義類型的字段符號的TYPE選項(xiàng)很有意義,但要避免結(jié)果錯誤消息。在這種情況下,所指定的類型和字段符號的鍵入類型必須兼容。不管分配的數(shù)據(jù)對象怎樣,字段符號保持它的數(shù)據(jù)類型。
18、詳細(xì)信息和示例,參見鍵入字段符號。如果程序中分配之后使用字段符號,則分配的數(shù)據(jù)對象不被轉(zhuǎn)化為指定類型。因此,數(shù)據(jù)對象內(nèi)容應(yīng)該解釋為類型的字段。如果指定的數(shù)據(jù)類型未知指定數(shù)據(jù)類型的長度與分配的字段類型不匹配有對齊錯誤(參見對齊數(shù)據(jù)對象)則系統(tǒng)反應(yīng)為運(yùn)行錯誤。DATATXT(8)VALUE19950606.DATAMYTYPE(1)VALUEX.FIELD-SYMBOLS.ASSIGNTXTTO.WRITE/.ASSIGNTXTTOTYPED.WRITE/.ASSIGNTXTTOTYPEMYTYPE.WRITE/.輸出如下:19950606060619953139393530363036該示例中,
19、三次將字符串TXT分配給。第一次的類型保持不變,第二次的類型變?yōu)轭愋虳,第三次的類型變?yōu)轭愋蚗。請注意,當(dāng)成對考慮時,最后輸出行的數(shù)字表示TXT中字符的十六進(jìn)制代碼。第二個輸出行的格式取決于用戶的主記錄,而在第三行中則取決于由操作系統(tǒng)使用(在這種情形為ASCII碼)的字符表示法。tc更改小數(shù)位l2更改小數(shù)位可以更改字段符號的小數(shù)位,該字段符號在分配時指向類型P字段。為此,請如下使用ASSIGN語句中DECIMALS選項(xiàng):語法ASSIGN.TODECIMALS.可以使用DECIMALS選項(xiàng),該選項(xiàng)具有ASSIGN語句的所有變量。用DECIMALS選項(xiàng),字段符號的小數(shù)位變?yōu)?。一般地,這會導(dǎo)致字段符
20、號和分配的字段有不同的數(shù)值。可以是文字或變量。如果沒有位于0到14之間,或者分配的字段不屬類型P,則會出現(xiàn)運(yùn)行錯誤。DATA:PACK1TYPEPDECIMALS2VALUE400,PACK2TYPEPDECIMALS2,PACK3TYPEPDECIMALS2.FIELD-SYMBOLS:,.WRITE:/PACK1,PACK1.ASSIGNPACK1TODECIMALS1.WRITE:/,.PACK2=.WRITE:/PACK2,PACK2.ASSIGNPACK2TODECIMALS4.WRITE:/,.PACK3=+.WRITE:/PACK3,PACK3.=1234.56789.WRITE
21、:/,.WRITE:/PACK2,PACK2.輸出如下:PACK1400.004,000.0PACK24,000.0040.0000PACK34,040.001,234.5679PACK2123,456.79在該示例中,所有類型P字段有兩個小數(shù)位。字段符號和分別有一個和四個小數(shù)位。請注意,對于字段符號及其分配字段,數(shù)值是不同的。tc分配全局字段的局部副本l2分配全局字段的局部副本使用子程序時(參見子程序),可以在數(shù)據(jù)堆棧創(chuàng)建全局?jǐn)?shù)據(jù)的局部副本。為此,請如下使用ASSIGN語句:語法ASSIGNLOCALCOPYOF.TO.系統(tǒng)在堆棧上放置指定全局?jǐn)?shù)據(jù)的副本。在子程序中,不必通過寫字段符號地址更
22、改全局?jǐn)?shù)據(jù),就能訪問和更改該副本??梢耘cASSIGN語句中所有變量(在分配字段串組件中描述的除外)一起使用該選項(xiàng)。假設(shè)主程序SAPMZTST如下:PROGRAMSAPMZTST.DATA:BEGINOFCOMMONPART,TEXT(5)VALUEText1,ENDOFCOMMONPART.PERFORMROUTINE(FORMPOOL).WRITETEXT.假設(shè)包含子程序ROUTINE的主程序FORMPOOL如下:PROGRAMFORMPOOL.DATA:BEGINOFCOMMONPART,TEXT(5)VALUEText1,ENDOFCOMMONPART.FORMROUTINE.FIELD
23、-SYMBOLS.ASSIGNLOCALCOPYOFTEXTTO.WRITE.=Text2.WRITE.ASSIGNTEXTTO.WRITE.=Text3.ENDFORM.啟動SAPMZTST之后,輸出如下:Text1Text2Text1Text3示例中,字段TEXT被聲明為主程序SAPMZTST和程序FORMPOOL的共用數(shù)據(jù)區(qū)。通過在程序FORMPOOL的子程序ROUTINE中將TEXT分配給,將字段TEXT的副本放置到局部數(shù)據(jù)堆棧上。通過寫地址,可以讀取和更改該副本。全局字段TEXT不受局部字段操作的影響。tc運(yùn)行檢查l2xe字段符號,數(shù)據(jù)區(qū)域xe字段符號,運(yùn)行時間檢查運(yùn)行檢查運(yùn)行時,系
24、統(tǒng)執(zhí)行某些檢查,以避免由在定義數(shù)據(jù)區(qū)之外的錯誤分配引起的內(nèi)存數(shù)據(jù)的非控制丟失。定義如下的數(shù)據(jù)區(qū):內(nèi)表的表存儲區(qū)。存儲區(qū)的大小取決于表行數(shù),這種表行數(shù)未固定,而運(yùn)行時,經(jīng)常動態(tài)擴(kuò)展(參見創(chuàng)建和處理內(nèi)表)。其它數(shù)據(jù)對象的DATA存儲區(qū)。該存儲區(qū)的大小在數(shù)據(jù)聲明期間是固定的(參見聲明數(shù)據(jù))。字段符號不能指向這些區(qū)域之外的地址。如果系統(tǒng)在運(yùn)行時遇到這類問題,將停止處理程序。某些系統(tǒng)信息,諸如內(nèi)表的控制塊,也存儲在DATA存儲區(qū)中。因此,盡管有運(yùn)行檢查,還是有可能無意地覆蓋一些字段,并引起后續(xù)錯誤(如表頭損壞)。PROGRAMSAPMZTST.DATA:TEXT1(10),TEXT2(10),TEXT3
25、(5).FIELD-SYMBOLS.DO25TIMES.ASSIGNTEXT1+SY-INDEX(1)TO.ENDDO.啟動SAPMZTST之后,發(fā)生運(yùn)行錯誤。系統(tǒng)反應(yīng)如下:DATA存儲區(qū)寬度為25。最后的循環(huán)途徑試圖分配該范圍之外的地址,因?yàn)槠屏渴?5。直到第24循環(huán)途徑,未發(fā)生錯誤。如果試圖在ASSIGN語句中用TEXT2替換TEXT1,將在第15循環(huán)中發(fā)生錯誤。tc以簇方式存儲數(shù)據(jù)對象l1xe簇xeEXPORTxe數(shù)據(jù)對象,另存為簇xeIMPORT以簇方式存儲數(shù)據(jù)對象可以用數(shù)據(jù)簇方式對ABAP/4程序的任何復(fù)雜內(nèi)部數(shù)據(jù)對象進(jìn)行分組保存,并將其臨時存儲在ABAP/4內(nèi)存中,或長時間存儲在
26、數(shù)據(jù)庫中。在下列主題中,您將學(xué)到更多有關(guān)在內(nèi)存和數(shù)據(jù)庫中存儲數(shù)據(jù)簇的知識ABAP/4內(nèi)存中的數(shù)據(jù)簇數(shù)據(jù)庫中的數(shù)據(jù)簇tcABAP/4內(nèi)存中的數(shù)據(jù)簇l2ABAP/4內(nèi)存中的數(shù)據(jù)簇可以在ABAP/4內(nèi)存中存儲數(shù)據(jù)簇。ABAP/4內(nèi)存是分配給特定事務(wù)的存儲區(qū),任何模塊都是用關(guān)鍵詞CALL或SUBMIT從中進(jìn)行調(diào)用的。關(guān)于事務(wù)流的詳細(xì)信息,參見編寫ABAP/4事務(wù)。ABAP/4內(nèi)存與在事務(wù)期間生成該內(nèi)存的ABAP/4程序或程序模塊無關(guān)。這意味著在同一事務(wù)中,存儲在ABAP/4內(nèi)存中的對象可由任何ABAP/4程序重新讀取。但本節(jié)所說的ABAP/4內(nèi)存與不受事務(wù)限制的全局SAP內(nèi)存不同(對于示例,參見調(diào)用報
27、表)。ABAP/4內(nèi)存允許跨越多個程序?qū)哟危诓煌K化單元之間進(jìn)行數(shù)據(jù)傳遞。例如,可以在下列單元之間傳遞數(shù)據(jù):報表和其他SUBMIT調(diào)用的報表事務(wù)和報表不同對話模塊程序和功能模塊等等。離開事務(wù)后,就釋放該內(nèi)存。使用EXPORTTOMEMORY語句在內(nèi)存中存儲數(shù)據(jù)對象。在ABAP/4內(nèi)存中存儲數(shù)據(jù)對象使用IMPORTFROMMEMORY語句從內(nèi)存中讀取數(shù)據(jù)對象。從內(nèi)存中讀取數(shù)據(jù)對象使用FREEMEMORY語句從內(nèi)存中刪除數(shù)據(jù)簇。刪除內(nèi)存中的數(shù)據(jù)簇tc在ABAP/4內(nèi)存中存儲數(shù)據(jù)對象l2在ABAP/4內(nèi)存中存儲數(shù)據(jù)對象要將數(shù)據(jù)對象從ABAP/4程序?qū)懭階BAP/4內(nèi)存,請使用下列語句:語法EXP
28、ORTFROMFROM.TOMEMORYID.此語句將列表中指定的數(shù)據(jù)對象存儲為ABAP/4內(nèi)存中的數(shù)據(jù)簇。如果忽略選項(xiàng)FROM,則將數(shù)據(jù)對象存儲到自己的名稱之下。如果使用該選項(xiàng),則將數(shù)據(jù)對象存儲到下面。ID用于標(biāo)識內(nèi)存數(shù)據(jù),不得超過32個字符。EXPORT語句總是完全改寫ID相同的任何現(xiàn)有數(shù)據(jù)簇的內(nèi)容。對于有表頭行的內(nèi)表,只可以存儲表本身,而不能存儲表頭行。在EXPORT語句中,將表名解釋為表。這是例外。通常情況下,語句將表名解釋為表工作區(qū)(參見訪問內(nèi)表)。PROGRAMSAPMZTS1.DATATEXT1(10)VALUEExporting.DATAITABLIKESBOOKOCCURS1
29、0WITHHEADERLINE.DO5TIMES.ITAB-BOOKID=100+SY-INDEX.APPENDITAB.ENDDO.EXPORTTEXT1TEXT2FROMLiteralTOMEMORYIDtext.EXPORTITABTOMEMORYIDtable.在此示例中,文本字段TEXT1和TEXT2存儲到程序SAPMZTS1的ABAP/4內(nèi)存的ID“文本”之下,內(nèi)表ITAB則存儲到ID“表”中。createdwithHelptoRTFfileformatconvertertc從內(nèi)存中讀取數(shù)據(jù)對象l2xeIMPORT,FROMMEMORY從內(nèi)存中讀取數(shù)據(jù)對象要將ABAP/4內(nèi)存中的數(shù)
30、據(jù)對象讀到ABAP/4程序中,請使用下列語句:語法IMPORTTOTO.FROMMEMORYID.此語句從ABAP/4內(nèi)存的數(shù)據(jù)簇中讀取列表中指定的數(shù)據(jù)對象。如果忽略選項(xiàng)TO,則將內(nèi)存中的數(shù)據(jù)對象賦給程序中的同名數(shù)據(jù)對象。如果使用此選項(xiàng),則將內(nèi)存中的數(shù)據(jù)對象寫入字段中。ID用于標(biāo)識內(nèi)存數(shù)據(jù),不得超過32個字符。不必讀取存儲在特定ID下的所有對象。相反,可以從名稱中進(jìn)行選擇。如果內(nèi)存中不包含指定ID下的對象,則將SY-SUBRC設(shè)置為4。但是,如果內(nèi)存中存在帶此ID的數(shù)據(jù)簇,無論數(shù)據(jù)對象是否也存在,SY-SUBRC之值總是為0。如果簇中不存在數(shù)據(jù)對象,則目標(biāo)字段保持不變。此語句不進(jìn)行這種檢查:即
31、內(nèi)存中的對象結(jié)構(gòu)與要寫入的結(jié)構(gòu)是否匹配。因?yàn)閿?shù)據(jù)是按位進(jìn)行傳送的,所以不匹配的結(jié)構(gòu)可能會引起不一致。PROGRAMSAPMZTS1.DATATEXT1(10)VALUEExporting.DATAITABLIKESBOOKOCCURS10WITHHEADERLINE.DO5TIMES.ITAB-BOOKID=100+SY-INDEX.APPENDITAB.ENDDO.EXPORTTEXT1TEXT2FROMLiteralTOMEMORYIDtext.EXPORTITABTOMEMORYIDtable.SUBMITSAPMZTS2ANDRETURN.SUBMITSAPMZTS3.程序的第一部分對
32、應(yīng)于在ABAP/4內(nèi)存中存儲數(shù)據(jù)對象中的示例。當(dāng)前示例也以SUBMIT調(diào)用程序SAPMZTS1和SAPMZTS2。通過在ABAP/4編輯器中雙擊程序名生成和維護(hù)SUBMIT后面指定的程序。關(guān)于SUBMIT的詳細(xì)信息,參見調(diào)用報表。SAPMZTS2的示例:PROGRAMSAPMZTS2.DATA:TEXT1(10),TEXT3LIKETEXT1VALUEInitial.IMPORTTEXT3FROMMEMORYIDtext.WRITE:/SY-SUBRC,TEXT3.IMPORTTEXT2TOTEXT1FROMMEMORYIDtext.WRITE:/SY-SUBRC,TEXT1.SAPMZTS3
33、的示例:PROGRAMSAPMZTS3.DATAJTABLIKESBOOKOCCURS10WITHHEADERLINE.IMPORTITABTOJTABFROMMEMORYIDtable.LOOPATJTAB.WRITE/JTAB-BOOKID.ENDLOOP.輸出位于兩個連續(xù)的屏幕上,如下所示:和SAPMZTS2試圖從數(shù)據(jù)簇“文本”中讀取不存在的數(shù)據(jù)對象TEXT3。因此,目標(biāo)字段TEXT3保持不變。現(xiàn)有數(shù)據(jù)對象TEXT2被放到TEXT1之后。兩種情況中,因?yàn)榇亍拔谋尽卑瑪?shù)據(jù),SY-SUBRC都被設(shè)置為0。SAPMZTS3將內(nèi)表ITAB從簇“表”中寫入內(nèi)表JTAB。兩個表結(jié)構(gòu)一樣,同為ABA
34、P/4詞典表SBOOK結(jié)構(gòu)。tc刪除內(nèi)存中的數(shù)據(jù)簇l2刪除內(nèi)存中的數(shù)據(jù)簇要刪除ABAP/4內(nèi)存中的數(shù)據(jù)對象,請使用下列語句:語法FREEMEMORYID.如果不附加ID,則此語句刪除整個內(nèi)存,包括此前用EXPORT存儲到ABAP/4內(nèi)存中的所有數(shù)據(jù)簇。附加ID之后,該語句只刪除用此名稱命名的數(shù)據(jù)簇。因?yàn)閯h除整個內(nèi)存會導(dǎo)致任何系統(tǒng)例程內(nèi)存內(nèi)容的丟失,所以只應(yīng)使用附加有ID的FREEMEMORY語句。PROGRAMSAPMZTST.DATA:TEXT(10)VALUE0123456789,IDEN(3)VALUEXYZ.EXPORTTEXTTOMEMORYIDIDEN.TEXT=xxxxxxxxx
35、x.IMPORTTEXTFROMMEMORYIDIDEN.WRITE:/SY-SUBRC,TEXT.FREEMEMORY.TEXT=xxxxxxxxxx.IMPORTTEXTFROMMEMORYIDIDEN.WRITE:/SY-SUBRC,TEXT.此示例的輸出為:001234567894xxxxxxxxxxFREEMEMORY語句刪除數(shù)據(jù)簇“XYZ”。因此,在下一個IMPORT語句之后,系統(tǒng)字段SY-SUBRC被設(shè)置為4,而目標(biāo)字段保持不變。tc數(shù)據(jù)庫中的數(shù)據(jù)簇l2數(shù)據(jù)庫中的數(shù)據(jù)簇可以將數(shù)據(jù)簇存儲到ABAP/4詞典的特定數(shù)據(jù)庫中。就是所謂的ABAP/4簇數(shù)據(jù)庫,其預(yù)定義結(jié)構(gòu)為:簇數(shù)據(jù)庫該方法
36、允許單步存儲任何具有深結(jié)構(gòu)的復(fù)雜數(shù)據(jù)對象,而不必將其調(diào)整為關(guān)系數(shù)據(jù)庫的平面結(jié)構(gòu)。這樣,在整個系統(tǒng)中都可使用該數(shù)據(jù)對象,并且每個用戶都可對其進(jìn)行訪問。要使訪問成功,必須知道存儲對象的數(shù)據(jù)類型。在簇數(shù)據(jù)庫中存儲數(shù)據(jù),對于支持有關(guān)關(guān)系數(shù)據(jù)庫信息的分析結(jié)果十分有用。例如,如果要從所有分支機(jī)構(gòu)的人員數(shù)據(jù)中生成銷售額最高的客戶清單或者完整的通訊錄,就可以編寫ABAP/4程序,讓程序來解決此類問題,并將結(jié)果存儲為數(shù)據(jù)簇。如果需要刷新存儲的數(shù)據(jù)簇,可以在后臺定期運(yùn)行這些程序。要使用該結(jié)果,可以使用只訪問該數(shù)據(jù)簇的其他程序。因?yàn)椴槐卦诿看问褂媒Y(jié)果時都訪問關(guān)系數(shù)據(jù)庫中的分布式數(shù)據(jù),并且也不必每次都重新生成結(jié)果,所
37、以,此方法可以很大程度上減少系統(tǒng)的響應(yīng)時間。存儲數(shù)據(jù)簇是專就ABAP/4而言。盡管也可以使用SQL語句訪問簇數(shù)據(jù)庫,但是,只有ABAP/4語句能夠?qū)σ汛鎯Φ臄?shù)據(jù)簇結(jié)構(gòu)進(jìn)行解碼。使用EXPORTTODATABASE語句將數(shù)據(jù)對象存儲到簇數(shù)據(jù)庫中。在簇數(shù)據(jù)庫中存儲數(shù)據(jù)對象使用IMPORTFROMDATABASE語句為數(shù)據(jù)簇生成目錄表,并從簇數(shù)據(jù)庫中讀取數(shù)據(jù)對象。創(chuàng)建數(shù)據(jù)簇目錄表從簇數(shù)據(jù)庫中讀取數(shù)據(jù)對象使用DELETEFROMDATABASE語句從簇數(shù)據(jù)庫中刪除數(shù)據(jù)簇。從簇數(shù)據(jù)庫中刪除數(shù)據(jù)簇關(guān)于使用開放式SQL語句訪問簇數(shù)據(jù)庫的信息,參見用開放式SQL語句訪問簇數(shù)據(jù)庫tc簇數(shù)據(jù)庫l2xe簇式數(shù)據(jù)庫簇
38、數(shù)據(jù)庫簇數(shù)據(jù)庫是ABAP/4詞典中的特殊數(shù)據(jù)庫。用于存儲數(shù)據(jù)簇。其行結(jié)構(gòu)被劃分為部分標(biāo)準(zhǔn)化的開始區(qū)(由多個字段組成)和一個用于存儲數(shù)據(jù)的大的區(qū)域。下列主題介紹建立簇數(shù)據(jù)庫的規(guī)則,同時還就系統(tǒng)定義的簇數(shù)據(jù)庫INDX進(jìn)行討論。簇數(shù)據(jù)庫的結(jié)構(gòu)簇數(shù)據(jù)庫的示例tc簇數(shù)據(jù)庫的結(jié)構(gòu)l2簇數(shù)據(jù)庫的結(jié)構(gòu)簇數(shù)據(jù)庫的結(jié)構(gòu)如下所示:建立簇數(shù)據(jù)庫的規(guī)則如下所述。必須創(chuàng)建第一點(diǎn)到第四點(diǎn)中列出的關(guān)鍵字段。上述數(shù)據(jù)類型都是ABAP/4詞典類型。1.如果該表是針對客戶的,第一個字段必須這樣定義:名稱為MANDT,類型為CHAR,長度為3字節(jié),用于存儲客戶ID。存儲數(shù)據(jù)簇時,系統(tǒng)既可自動使用當(dāng)前客戶填寫字段MANDT,還可使用E
39、XPORT語句中顯式指定的客戶進(jìn)行填寫。2.下一字段(對于與客戶無關(guān)的表,這是第一個字段)必須這樣定義:名稱為RELID,類型為CHAR,長度為2字節(jié)。該字段包含區(qū)域ID。簇數(shù)據(jù)庫被分成不同的區(qū)域。存儲數(shù)據(jù)簇時,系統(tǒng)用EXPORT語句中指定的區(qū)域ID填寫字段RELID。3.下一字段類型為CHAR,長度可變。它包含簇的名稱,存儲數(shù)據(jù)簇時,在程序中用EXPORT語句的附加ID指定了該簇。因?yàn)楹竺娴淖侄我獙R,所以系統(tǒng)應(yīng)最多使用3個未用字節(jié)填充在字段RELID的結(jié)尾。如果創(chuàng)建自己的簇數(shù)據(jù)庫,應(yīng)該相應(yīng)地定義此字段的長度。4.下一字段必須名稱為SRTF2,類型為INT4,長度為4。單個數(shù)據(jù)簇可以擴(kuò)展到數(shù)
40、據(jù)庫表的好幾行中。在理論上,每個簇可能有2*31行。字段SRTF2包含存儲的數(shù)據(jù)簇內(nèi)行的順序號碼,可以是0和2*31-1之間的任何值。存儲數(shù)據(jù)簇時,系統(tǒng)自動填寫此字段(參見第7點(diǎn))。5.SRTF2的后面可以是任何數(shù)目的數(shù)據(jù)字段,這些字段名稱和類型可任意交換。存儲數(shù)據(jù)簇時,系統(tǒng)并不自動填寫這些字段。必須在程序中的EXPORT語句之前將值顯式分配到這些字段。通常包含諸如程序名、用戶ID等控制信息。6.行上的倒數(shù)第二個字段名稱必須為CLUSTR,類型為INT2,并且長度必須為2。它包含后面的字段CLUSTD中的數(shù)據(jù)長度。存儲數(shù)據(jù)簇時,系統(tǒng)自動填寫此字段。7.行上的最后一個字段必須名稱為CLUSTD,
41、類型為VARC。其長度可以任意,但通常為1000個字節(jié)左右。存儲數(shù)據(jù)簇時,系統(tǒng)按壓縮格式用實(shí)際數(shù)據(jù)填寫此字段。如果CLUSTD的長度不足以存儲簇數(shù)據(jù),則數(shù)據(jù)就被分布到多行上。這些行在字段SRTF2中進(jìn)行編號(參見上面的第4點(diǎn))。既可以按照上述規(guī)則創(chuàng)建自己的簇數(shù)據(jù)庫(此時參見文檔ABAP/4詞典!JumpContents(BCDWBDIC.HLP)),也可以使用系統(tǒng)定義的簇數(shù)據(jù)庫INDX:簇數(shù)據(jù)庫的示例tc簇數(shù)據(jù)庫的示例l2簇數(shù)據(jù)庫的示例數(shù)據(jù)庫INDX是簇數(shù)據(jù)庫的示例,是系統(tǒng)中所包含的標(biāo)準(zhǔn)安裝的一部分。從用戶應(yīng)用的角度考慮,由于沒有必要先創(chuàng)建新的簇數(shù)據(jù)庫,所以,比較實(shí)用。而且,所有用戶都可以訪問
42、存儲在這里的數(shù)據(jù),并且還可更改或刪除。要在ABAP/4編輯器中查看數(shù)據(jù)庫INDX的結(jié)構(gòu),請選擇“編輯-詳細(xì)功能-命令條目”,然后輸入SHOWINDX,或者雙擊INDX,例如在TABLES語句中。對于每個字段,都將看到ABAP/4詞典數(shù)據(jù)類型和相應(yīng)的ABAP/4編程語言的數(shù)據(jù)類型(也就是TABLES生成的表工作區(qū)中的組件數(shù)據(jù)類型)。頭四個字段是表INDX的關(guān)鍵字段,并且與簇數(shù)據(jù)庫的結(jié)構(gòu)中介紹的完全相同。此處簇名的第三個字段的名稱是SRTFD,長度為22字節(jié),也就是說,對于INDX,ABAP/4程序中以EXPORT語句的附加ID指定的名稱最多可以有22個字符。后七個字段是非標(biāo)準(zhǔn)字段,用于用戶輸入,
43、例如:AEDAT:最后修改的日期USERA:用戶名PGMID:程序名最后兩個字段也是預(yù)定義的。在表INDX中,存儲實(shí)際數(shù)據(jù)簇的字段CLUSTD的長度為2886個字節(jié)。有關(guān)表INDX用法的示例,參見在簇數(shù)據(jù)庫中存儲數(shù)據(jù)對象創(chuàng)建數(shù)據(jù)簇目錄表從簇數(shù)據(jù)庫中讀取數(shù)據(jù)對象從簇數(shù)據(jù)庫中刪除數(shù)據(jù)簇tc在簇數(shù)據(jù)庫中存儲數(shù)據(jù)對象l2xeEXPORT,TODATABASE在簇數(shù)據(jù)庫中存儲數(shù)據(jù)對象要在簇數(shù)據(jù)庫中存儲ABAP/4程序的數(shù)據(jù)對象,請使用下列語句:語法EXPORTFROMFROM.TODATABASE()CLIENTID.此語句將列表中指定的數(shù)據(jù)對象存儲為簇數(shù)據(jù)庫中的簇。必須用TABLES語句對加以聲明。如
44、果不附加FROM,則將數(shù)據(jù)對象存儲在自己的名稱之下。如果有附件項(xiàng),則將數(shù)據(jù)對象存儲到名稱之下。是存儲數(shù)據(jù)庫的簇的兩字符區(qū)域ID。(參見簇數(shù)據(jù)庫的結(jié)構(gòu)下的第2點(diǎn))。標(biāo)識數(shù)據(jù)庫中的數(shù)據(jù),其最大長度取決于中名稱字段的長度。(參見簇數(shù)據(jù)庫的結(jié)構(gòu)下面的第3點(diǎn))。在處理特定客戶的簇數(shù)據(jù)庫時可以使用選項(xiàng)CLIENT關(guān)閉自動客戶處理,然后自己指定客戶。必須在指定數(shù)據(jù)庫名稱之后立即指定此選項(xiàng)。(參見簇數(shù)據(jù)庫的結(jié)構(gòu)下面的第1點(diǎn))。EXPORT語句也將表工作區(qū)的用戶字段內(nèi)容傳輸?shù)綌?shù)據(jù)庫表。根據(jù)需要,可以預(yù)先填寫這些字段。(參見簇數(shù)據(jù)庫的結(jié)構(gòu)下面的第5點(diǎn))。在具有相同名稱的相同工作區(qū)和相同客戶系統(tǒng)中,EXPORT語句
45、總是完全改寫任何現(xiàn)有數(shù)據(jù)簇的內(nèi)容。對于含有表頭行的內(nèi)表,只可以存儲表本身,而不能存儲表頭行。在EXPORT語句中,將表名解釋為表。這是例外。通常將表名解釋為表工作區(qū)(參見訪問內(nèi)表)。PROGRAMSAPMZTS1.TABLESINDX.DATA:BEGINOFITABOCCURS100,COL1TYPEI,COL2TYPEI,ENDOFITAB.DO3000TIMES.ITAB-COL1=SY-INDEX.ITAB-COL2=SY-INDEX*2.APPENDITAB.ENDDO.INDX-AEDAT=SY-DATUM.INDX-USERA=SY-UNAME.INDX-PGMID=SY-REP
46、ID.EXPORTITABTODATABASEINDX(HK)IDTable.WRITE:SRTF2,AT20AEDAT,AT35USERA,AT50PGMID.ULINE.SELECT*FROMINDXWHERERELID=HKANDSRTFD=Table.WRITE:/INDX-SRTF2UNDERSRTF2,INDX-AEDATUNDERAEDAT,INDX-USERAUNDERUSERA,INDX-PGMIDUNDERPGMID.ENDSELECT.使用3000行填寫了內(nèi)表ITAB,并且,在給INDX的某些用戶字段賦值之后,ITAB被輸出到INDX。因?yàn)镮NDX是關(guān)系數(shù)據(jù)庫,所以可以使
47、用開放式SQL語句定位單獨(dú)行。使用SELECT語句,輔以適當(dāng)?shù)腤HERE條件就可選擇用EXPORT存儲的行。數(shù)據(jù)庫字段的輸出如下所示:其中,輸出表明用戶字段AEDAT、USERA和PGMID由EXPORT傳送,并且包含ITAB的數(shù)據(jù)簇擴(kuò)展了6行。如果在DO語句中更改數(shù)目3000,則此數(shù)據(jù)簇占用的行數(shù)也會發(fā)生變化。tc創(chuàng)建數(shù)據(jù)簇目錄表l2創(chuàng)建數(shù)據(jù)簇目錄表要從ABAP/4簇數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)簇目錄表,請使用下列語句:語法IMPORTDIRECTORYINTOFROMDATABASE()CLIENTID.此語句在存儲于數(shù)據(jù)庫中的數(shù)據(jù)簇中創(chuàng)建一系列數(shù)據(jù)對象,并將其放到表中。必須使用TABLES語句聲明。
48、要將數(shù)據(jù)簇存儲到數(shù)據(jù)庫中,通常使用EXPORTTODATABASE語句(參見在簇數(shù)據(jù)庫中存儲數(shù)據(jù)對象)。關(guān)于數(shù)據(jù)庫表結(jié)構(gòu)的詳細(xì)信息,參見簇數(shù)據(jù)庫的結(jié)構(gòu)。是即將存儲數(shù)據(jù)庫的簇的兩字符ID。標(biāo)識數(shù)據(jù)庫中的數(shù)據(jù),其最大長度取決于中名稱字段的長度。在處理特定客戶的簇數(shù)據(jù)庫時,可以使用選項(xiàng)CLIENT關(guān)閉自動客戶處理,然后自己指定客戶。必須在指定數(shù)據(jù)庫名稱之后立即指定此選項(xiàng)。IMPORT語句也自動從數(shù)據(jù)庫表中讀取表工作區(qū)的用戶字段內(nèi)容。如果可以創(chuàng)建某個目錄表,則把SY-SUBRC設(shè)置為0。否則,設(shè)置為4。必須按照ABAP/4詞典結(jié)構(gòu)CDIR建立內(nèi)表。為此,請使用DATA語句的附件LIKE(參見DATA語
49、句的基本格式)。結(jié)構(gòu)CDIR包含下列組件:字段名類型說明NAMECHAR在簇中存儲的對象名稱OTYPECHAR對象類型:F表示基本字段R表示字段串T表示內(nèi)表FTYPECHAR對象的數(shù)據(jù)類型。結(jié)構(gòu)化的數(shù)據(jù)類型是類型C。TFILLINT4已填寫行的數(shù)目(針對內(nèi)表)。FLENGINT2字段或結(jié)構(gòu)的長度。PROGRAMSAPMZTS2.TABLESINDX.DATADIRTABLIKECDIROCCURS10WITHHEADERLINE.IMPORTDIRECTORYINTODIRTABFROMDATABASEINDX(HK)IDTable.IFSY-SUBRC=0.WRITE:/AEDAT:,IND
50、X-AEDAT,/USERA:,INDX-USERA,/PGMID:,INDX-PGMID.WRITE/Directory:.LOOPATDIRTAB.WRITE:/DIRTAB-NAME,DIRTAB-OTYPE,DIRTAB-FTYPE,DIRTAB-TFILL,DIRTAB-FLENG.ENDLOOP.ELSE.WRITENotfound.ENDIF.此程序創(chuàng)建數(shù)據(jù)簇的目錄表,該數(shù)據(jù)簇是用在簇數(shù)據(jù)庫中存儲數(shù)據(jù)對象中的示例程序存儲的。其輸出如下所示:內(nèi)容DIRTAB的表含有一行,該行表明數(shù)據(jù)簇包含名為ITAB的內(nèi)表,表具有3000個長度為8個字節(jié)的已填寫行。tc從簇數(shù)據(jù)庫中讀取數(shù)據(jù)對象l2
51、從簇數(shù)據(jù)庫中讀取數(shù)據(jù)對象要將數(shù)據(jù)對象從ABAP/4簇數(shù)據(jù)庫讀入ABAP/4程序中,請使用下列語句:語法IMPORTTOTO.FROMDATABASE()CLIENTID|MAJOR-IDMINOR-ID.此語句從數(shù)據(jù)庫中的數(shù)據(jù)簇中讀取列表中指定的數(shù)據(jù)對象。必須用TABLES語句聲明。如果不附加TO,則將數(shù)據(jù)庫的數(shù)據(jù)對象分配給程序中的同名數(shù)據(jù)對象。如果不附加此選項(xiàng),則將數(shù)據(jù)庫的數(shù)據(jù)對象寫入字段。要將數(shù)據(jù)簇存儲到數(shù)據(jù)庫中,通常使用EXPORTTODATABASE語句(參見在簇數(shù)據(jù)庫中存儲數(shù)據(jù)對象)。關(guān)于數(shù)據(jù)庫表結(jié)構(gòu)的詳細(xì)信息,參見簇數(shù)據(jù)庫的結(jié)構(gòu)。是即將存儲數(shù)據(jù)庫的簇的兩字符區(qū)域ID。標(biāo)識數(shù)據(jù)庫中的
52、數(shù)據(jù),其最大長度取決于中名稱字段的長度??梢杂肕AJOR-ID代替附加ID。然后,就選定名稱的第一部分與相符的數(shù)據(jù)簇。如果指定具有MAJOR-ID的附加MINOR-ID,則選擇名稱的第二部分(也就是長度之后的位置)大于或等于的數(shù)據(jù)簇。在處理特定客戶簇數(shù)據(jù)庫時,可以使用選項(xiàng)CLIENT關(guān)閉自動客戶處理,然后自己指定客戶。必須在輸入數(shù)據(jù)庫名之后立即指定此選項(xiàng)。IMPORT語句也自動從數(shù)據(jù)庫表中讀取表工作區(qū)的用戶字段內(nèi)容。不必讀取存儲在特殊名稱之下的所有對象,但可以使用名稱作出選擇。如果數(shù)據(jù)庫不包含具有指定關(guān)鍵字、和的對象,則將SY-SUBRC設(shè)置為4。但是,如果數(shù)據(jù)庫中存在具有這些關(guān)鍵字的數(shù)據(jù)簇,
53、那么,無論是否存在數(shù)據(jù)對象,SY-SUBRC之值總是為0。如果簇中沒有數(shù)據(jù)對象,則目標(biāo)字段保持不變。運(yùn)行時,系統(tǒng)檢查此語句以查看數(shù)據(jù)庫中對象的結(jié)構(gòu)是否與要寫入的結(jié)構(gòu)相符。如果不符合,將出現(xiàn)運(yùn)行時間錯誤。類型C字段是此規(guī)則的例外,也可顯示在結(jié)構(gòu)數(shù)據(jù)字段結(jié)尾??梢约娱L、縮短、附加或忽略。PROGRAMSAPMZTS3.TABLESINDX.DATA:BEGINOFJTABOCCURS100,COL1TYPEI,COL2TYPEI,ENDOFJTAB.IMPORTITABTOJTABFROMDATABASEINDX(HK)IDTable.WRITE:/AEDAT:,INDX-AEDAT,/USERA
54、:,INDX-USERA,/PGMID:,INDX-PGMID.SKIP.WRITEJTAB:.LOOPATJTABFROM1TO5.WRITE:/JTAB-COL1,JTAB-COL2.ENDLOOP.此程序?qū)?nèi)表JTAB(用在簇數(shù)據(jù)庫中存儲數(shù)據(jù)對象中的示例程序存儲)從簇數(shù)據(jù)庫INDX讀入內(nèi)表JTAB。INDX的某些用戶字段輸出和JTAB的頭五行如下所示:createdwithHelptoRTFfileformatconvertertc從簇數(shù)據(jù)庫中刪除數(shù)據(jù)簇l2xeDELETE,FROMDATABASE從簇數(shù)據(jù)庫中刪除數(shù)據(jù)簇要從簇數(shù)據(jù)庫中刪除數(shù)據(jù)簇,請使用下列語句:語法DELETEFROMD
55、ATABASE()CLIENTID.此語句刪除數(shù)據(jù)庫表中區(qū)域?yàn)楹兔Q為的整個數(shù)據(jù)簇。必須用TABLES語句對進(jìn)行聲明。在處理特定客戶簇數(shù)據(jù)庫時,可以使用選項(xiàng)CLIENT關(guān)閉自動客戶處理,然后自己指定客戶。必須在輸入數(shù)據(jù)庫名稱之后立即指定此選項(xiàng)。要將數(shù)據(jù)簇存儲到數(shù)據(jù)庫中,通常使用EXPORTTODATABASE語句(參見在簇數(shù)據(jù)庫中存儲數(shù)據(jù)對象)。關(guān)于數(shù)據(jù)庫表結(jié)構(gòu)的詳細(xì)信息,參見簇數(shù)據(jù)庫的結(jié)構(gòu)。此DELETE語句從簇數(shù)據(jù)庫中刪除被指定數(shù)據(jù)簇覆蓋的所有行。如果可以刪除具有指定關(guān)鍵字的數(shù)據(jù)簇,則把SY-SUBRC設(shè)置為0。否則,其值為4。PROGRAMSAPMZTS4.TABLESINDX.DATADIRTABLIKECDIROCCURS10.IMPORTDIRECTORYINTODIRTABFROMDATABASEIN
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐廳前臺服務(wù)總結(jié)
- 酷咖食品科技產(chǎn)業(yè)園建設(shè)項(xiàng)目可行性研究報告模板-立項(xiàng)拿地
- 10月石家莊房地產(chǎn)市場調(diào)研總結(jié)報告
- 2025-2030全球環(huán)錠細(xì)紗機(jī)單錠檢測系統(tǒng)行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國有機(jī)天然肥料行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國風(fēng)冷單螺桿式冷水機(jī)組行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國航空航天設(shè)備零部件用超聲波清洗機(jī)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國網(wǎng)紅孵化服務(wù)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球電池護(hù)照(DDP)行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國冷加工噴丸機(jī)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 蘇教版四年級數(shù)學(xué)下冊第三單元第二課時《常見的數(shù)量關(guān)系》課件
- 浙江省臺州市2021-2022學(xué)年高一上學(xué)期期末質(zhì)量評估政治試題 含解析
- 寧夏“8·19”較大爆燃事故調(diào)查報告
- 中國高血壓防治指南(2024年修訂版)解讀課件
- 2024年浙江省中考科學(xué)試卷
- 初三科目綜合模擬卷
- 2024年全國高考新課標(biāo)卷物理真題(含答案)
- 勞動合同薪酬與績效約定書
- 足療店?duì)I銷策劃方案
- 學(xué)校安全一崗雙責(zé)
- 2024年全國版圖知識競賽(小學(xué)組)考試題庫大全(含答案)
評論
0/150
提交評論