程序间数据共享与传递(1):EXPORT/IMPORT、SAP/ABAP Memory
EXPORT?語(yǔ)句
EXPORT?{p1?=?dobj1 p2?=?dobj2?...}?|?{p1?FROM?dobj1 p2?FROM?dobj2?...}?|?(ptab)
?TO?| {?MEMORY ID?id?}?
??| {?DATABASE??????dbtab(ar)?[FROM?wa]?[CLIENT?cl]?ID?id?}?
??| {?SHARED MEMORY?dbtab(ar)?[FROM?wa] [CLIENT?cl]?ID?id?}?
??| {?SHARED?BUFFER?dbtab(ar)?[FROM?wa] [CLIENT?cl]?ID?id?}
?
1.???????{p1 =?dobj1?p2 = dobj2 ...}與?{p1 FROM dobj1 p2 FROM dobj2 ...}的意義一樣,只是寫(xiě)法不一樣,dobj1、dobj2…變量將會(huì)以p1、p2…名稱(chēng)存儲(chǔ)到內(nèi)存或數(shù)據(jù)庫(kù)中。p1、p2…名稱(chēng)隨便取,如果p1、p2…與將要存儲(chǔ)的變量名相同時(shí),只需寫(xiě)變量名即可,即等號(hào)與?FROM?后面可以省略。p1、p2…這些名稱(chēng)必須與IMPORT語(yǔ)句中相一致,否則讀取不出
2.???????(ptab):為動(dòng)態(tài)指定需要存儲(chǔ)的變量,ptab內(nèi)表結(jié)構(gòu)要求是這樣的:只需要兩列,列名任意,但類(lèi)型需要是字符型;第一列存儲(chǔ)如上面的p1、p2…名稱(chēng),第二列為上面的dobj1、dobj2…變量,如果變量與名稱(chēng)相同,則也可以像上面一樣,省略第二列的值。兩列的值都必需要大寫(xiě),實(shí)例如下:
TYPES:BEGIN OF?tab_type,
????para?TYPE?string,"列的名稱(chēng)任意,類(lèi)型為字符型
????dobj?TYPE?string,
??END OF?tab_type.
DATA:text1?TYPE?string?VALUE?`TXT1`,
??text2?TYPE?string?VALUE?`TXT2`,
??line??TYPE?tab_type,
??itab??TYPE STANDARD TABLE OF?tab_type.
line-para?=?'P1'."值都需要大寫(xiě)
line-dobj?=?'TEXT1'."值都需要大寫(xiě)
APPEND line TO?itab.
line-para?=?'P2'.
line-dobj?=?'TEXT2'.
APPEND line TO?itab.
EXPORT?(itab)?TO MEMORY ID?'TEXTS'.
IMPORT?p1?=?text2 p2?=?text1?FROM MEMORY ID?'TEXTS'.
WRITE:?/ text1,text2."TXT2 TXT1
CLEAR:?text1,text2.
IMPORT?(itab)?FROM MEMORY ID?'TEXTS'.
WRITE:?/ text1,text2."TXT1 TXT2
3.???????MEMORY ID:將變量存儲(chǔ)到ABAP Memory內(nèi)存中
4.???????DATABASE:將變量存儲(chǔ)到數(shù)據(jù)庫(kù)中;dbtab為簇?cái)?shù)據(jù)庫(kù)表的名稱(chēng)(如系統(tǒng)提供的標(biāo)準(zhǔn)表INDX);ar的值為區(qū)域ID,它將數(shù)據(jù)庫(kù)表的行分成若干區(qū)域,它必須被直接指定,且值是兩位字符,被存儲(chǔ)到簇?cái)?shù)據(jù)庫(kù)表中的RELID字段中;id?的值會(huì)存儲(chǔ)到簇?cái)?shù)據(jù)表中的RELID字段的下一用戶(hù)自定義字段中:
TYPES:BEGIN OF?tab_type,
????col1?TYPE i,
????col2?TYPE i,
??END OF?tab_type.
DATA:wa_indx?TYPE?demo_indx_table,
??wa_itab?TYPE?tab_type,
??itab??TYPE STANDARD TABLE OF?tab_type.
WHILE?sy-index?<?100.
??wa_itab-col1?=?sy-index.
??wa_itab-col2?=?sy-index?**?2.
??APPEND?wa_itab?TO?itab.
ENDWHILE.
wa_indx-timestamp?=?sy-datum && sy-uzeit.
wa_indx-userid????=?sy-uname.
EXPORT?tab?=?itab?TO DATABASE?demo_indx_table(sq)?FROM?wa_indx?ID?'TABLE'.
?
實(shí)例二:
TABLES:?indx.
DATA:?BEGIN OF?i_tab?OCCURS?100,
??col1?TYPE i,
??col2?TYPE i,
END OF?i_tab.
DO?3000?TIMES.
??i_tab-col1?=?sy-index.
??i_tab-col2?=?sy-index?**?2.
??APPEND?i_tab.
ENDDO.
indx-aedat?=?sy-datum.
indx-usera?=?sy-uname.
indx-pgmid?=?sy-repid.
"省略了FROM選項(xiàng),因?yàn)橐呀?jīng)使用TABLES indx語(yǔ)句定義了名為indx的結(jié)構(gòu)變量了
"Export時(shí)會(huì)自動(dòng)將表工作區(qū)indx變量中的用戶(hù)字段存儲(chǔ)到簇?cái)?shù)據(jù)庫(kù)表中
EXPORT?i_tab?TO DATABASE?indx(HK)?ID?'Key'.
WRITE:?' SRTF2',AT?20?'AEDAT',AT?35?'USERA',AT?50?'PGMID'.
ULINE.
"注:下面完全可以使用?IMPORT FROM DATABASE TO wa?語(yǔ)句來(lái)讀取用戶(hù)區(qū)字段
SELECT?*?FROM?indx?WHERE?relid?=?'HK'AND?srtfd?=?'Key'.
??WRITE:?/ indx-srtf2?UNDER?'SRTF2',
??indx-aedat?UNDER?'AEDAT',
??indx-usera?UNDER?'USERA',
??indx-pgmid?UNDER?'PGMID'.
ENDSELECT.
SRTF2?????????????AEDAT??????????USERA??????????PGMID
????????0??????????2011.10.12?????ZHENGJUN???????YJZJ_TEST2
????????1??????????2011.10.12?????ZHENGJUN???????YJZJ_TEST2
????????2??????????2011.10.12?????ZHENGJUN???????YJZJ_TEST2
????????3??????????2011.10.12?????ZHENGJUN???????YJZJ_TEST2
????????4??????????2011.10.12?????ZHENGJUN???????YJZJ_TEST2
5.???????SHARED MEMORY/BUFFER?:將數(shù)據(jù)存儲(chǔ)到SAP應(yīng)用服務(wù)器上的SAP Memory中,可共同一服務(wù)上的所有程序訪(fǎng)問(wèn)。兩種的作用是一樣的,最大不同是在數(shù)據(jù)達(dá)到最大內(nèi)存限制時(shí)的處理方式不同:最大內(nèi)存限制值分別是通過(guò)rsdb/esm/buffersize_kb?(SHARED MEMORY)、rsdb/obj/buffersize (SHARED?BUFFER)來(lái)設(shè)置的,當(dāng)內(nèi)存占用快滿(mǎn)時(shí),SHARED MEMORY必須通過(guò)DELETE FROM SHARED MEMORY來(lái)手動(dòng)清理,而SHARED BUFFER會(huì)自動(dòng)刪除很少被使用到的數(shù)據(jù)(當(dāng)然也可以通過(guò)DELETE FROM SHARED BUFFER手動(dòng)及時(shí)的刪除不用的數(shù)據(jù))
6.???????FROM wa:wa工作區(qū)類(lèi)型可以參照簇?cái)?shù)據(jù)庫(kù)dbtab類(lèi)型,也可定義成只含有用戶(hù)數(shù)據(jù)字段的結(jié)構(gòu),它是用來(lái)設(shè)置簇?cái)?shù)據(jù)庫(kù)表中SRTF2?與?CLUSTR兩個(gè)字段之間的用戶(hù)數(shù)據(jù)字段(參見(jiàn)簇?cái)?shù)據(jù)表圖中的編號(hào)為5的用戶(hù)數(shù)據(jù))的值,然后在Export時(shí)將相應(yīng)的字段存儲(chǔ)到SRTF2字段與CLUSTR字段間的相應(yīng)字段中去。如果使用“TABLES dbtab.”定義語(yǔ)句,可以省略“[FROM wa]”,也會(huì)默認(rèn)將其存儲(chǔ)到數(shù)據(jù)庫(kù)表中,但如果沒(méi)有“TABLES dbtab.”這樣的定義語(yǔ)句,也沒(méi)有“[FROM wa]”選項(xiàng)時(shí),將不會(huì)有數(shù)據(jù)存儲(chǔ)到簇?cái)?shù)據(jù)庫(kù)表中的用戶(hù)字段中去
7.???????CLIENT cl:默認(rèn)為當(dāng)前客戶(hù)端,存儲(chǔ)到簇?cái)?shù)據(jù)庫(kù)表中的MANDT字段中
總結(jié)
以上是生活随笔為你收集整理的程序间数据共享与传递(1):EXPORT/IMPORT、SAP/ABAP Memory的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SAP and ABAP Memory总
- 下一篇: 程序间数据共享与传递(2):EXPORT