SAP ABAP語法實(shí)例(二)_第1頁
SAP ABAP語法實(shí)例(二)_第2頁
SAP ABAP語法實(shí)例(二)_第3頁
SAP ABAP語法實(shí)例(二)_第4頁
SAP ABAP語法實(shí)例(二)_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、SAP ABAP語法實(shí)例調(diào)試1 調(diào)試鍵l F8跳過后面所有斷點(diǎn),程序執(zhí)行完 2 外部、會(huì)話、調(diào)試斷點(diǎn)調(diào)試斷點(diǎn)-debug時(shí)打的斷點(diǎn),程序遠(yuǎn)程完后就會(huì)消失會(huì)話斷點(diǎn)-程序運(yùn)行前通過會(huì)話斷點(diǎn)按鈕打的斷點(diǎn),在同一登錄會(huì)話不同窗口都有效,用戶注銷后消失外部斷點(diǎn)-程序運(yùn)行前通過外部斷點(diǎn)按鈕打的斷點(diǎn),用戶注銷后再登錄還是有效,但只針對(duì)同一用戶有效Select SELECT <result> FROM <source> INTO <target> WHERE <condition> GROUP BY <fields> HAVING <

2、cond> ORDER BY <fields>.GROUP BY:用于將一組數(shù)據(jù)條目壓縮為一個(gè)單行作為選擇最終結(jié)果;HAVING:用于限定ORDER BY子句子數(shù)據(jù)目組的選擇條件;ORDER BY:用于限定行排序;SELECT整體語法結(jié)構(gòu)。示例:以上示例查詢的是:20170503至20170510期間銷售訂單為JR01,且銷售量大于50的單據(jù)的訂單號(hào)、創(chuàng)建日期、創(chuàng)建者、類型以及合計(jì)銷量,并按銷售訂單升序排序。這里需要強(qiáng)調(diào)的是,如果要使用函數(shù)(如SUM、MAX、MIN),則需要將其他字段通過GROUP BY 進(jìn)行分組。如果需要繼續(xù)對(duì)使用函數(shù)進(jìn)行條件篩選,則可以使用關(guān)鍵字HAVI

3、NG。關(guān)鍵字ORDER BY 決定查詢結(jié)果的排序方法,ASCENDING為升序,DESCENDING為降序。1 SELECT SINGLE單行數(shù)據(jù):SELECT SINGLE <RESULT> INTO <target> FROM <source> .如果系統(tǒng)找到一個(gè)完全符合指定條件的行,SY-SUBRC返回0,否則返回4。一般不需要指明所有字段,而是在SELECT后用"*"符號(hào), 若指定多個(gè)數(shù)據(jù)對(duì)象,則需要將這些對(duì)象放在括號(hào)中,并用逗號(hào)隔開,而且其順序需要與SELECT子句中指明的表字段順序一致。這里的<target>為結(jié)構(gòu)

4、非內(nèi)表。示例:TABLES:  sflight.DATA: sum TYPE i VALUE 0.SELECT SINGLE SUM( seatsocc ) INTO sum FROM sflight WHERE carrid ='LH'.WRITE:/ sum.以上實(shí)現(xiàn)的是航線為L(zhǎng)H的合計(jì)座位數(shù)。區(qū)別以下代碼,上面代碼只輸出一行,下面則輸出多行:2 SELECT / ENDSELECT循環(huán)

5、通過SELECT / ENDSELECT循環(huán)從數(shù)據(jù)庫中讀取多行。SELECT DISTINCT <result>.<statement block> ENDSELECT.注:使用DISTINCT自動(dòng)去掉重復(fù)的行;SY-DBCNT(系統(tǒng)字段)為每次循環(huán)計(jì)數(shù).示例:使用distinct達(dá)到的效果與select single一樣,建議使用select single語句。3 一次性SELECT .INTO一次性把數(shù)據(jù)選擇到一個(gè)內(nèi)表中去。SELECT .INTO|APPENDINGCORRESPONDING FIELDS OFTABLE itab.該情況下SELECT并不啟動(dòng)循環(huán)

6、,因而不需要使用ENDSELECT語句;如果itab非空,則SELECT語句將用讀取的數(shù)據(jù)覆蓋其中的內(nèi)容,使用APPENDING代替INTO將不覆蓋內(nèi)表,若結(jié)構(gòu)不完全相同,也可使用CORRESPONDING FIELDS選項(xiàng)將同名區(qū)域相對(duì)應(yīng)。SQL編寫注意事項(xiàng)-性能實(shí)例1直接內(nèi)表操作優(yōu)先盡量不要在頻率較高的循環(huán)語句中使用updateinsertdeletemodify等操作,即盡量不要通過工作區(qū)實(shí)現(xiàn),直接通過操作內(nèi)表實(shí)現(xiàn)。示例:2 select into table優(yōu)于selectappend table.endselect在對(duì)內(nèi)表賦值時(shí),盡量使用select into table的寫法來代替

7、selectappend table.endselect 的寫法。盡量用對(duì)內(nèi)表的操作來代替對(duì)數(shù)據(jù)庫的操作。示例:DATA: BEGIN OF it_mara OCCURS 0,matnr LIKE mara-matnr,maktx LIKE makt-maktx,END OF it_mara.第一種寫法:Select matnrINTO it_maraFROM mara.APPEND it_mara.ENDSelect. 第二種寫法(high performace):Select matnrINTO TABLE it_maraFROM mara.3 使用for all entries不推薦Lo

8、op at int_cntry. Select single * from zfligh into int_fligh where cntry = int_cntry-cntry. Append int_fligh.Endloop.推薦Select * from zfligh appending table int_flighFor all entries in int_cntry Where cntry = int_cntry-cntry.內(nèi)表可以用來存放多筆數(shù)據(jù),OPEN SQL允許以內(nèi)表數(shù)據(jù)作為查詢條件,以方便對(duì)查詢對(duì)查詢數(shù)據(jù)的進(jìn)一步的篩選,相關(guān)語法如下:Select <f1fn&

9、gt; from <dbtab> FOR ALL ENTRIED IN <itab> WHERE 需要注意的是,在FOR ALL ENTRIED IN itab 之前,一定要檢查itab表是否為空,若為空則不執(zhí)行查詢,否則會(huì)查詢所有非條件限制的數(shù)據(jù)。示例1:  CHECK LT_MKPF IS NOT INITIAL.*   IF P_MATNR IS NOT INITIAL.  SELECT MBLNR

10、0;ZEILE MJAHR BWART WERKS MATNR MENGE SHKZG FROM MSEG    INTO CORRESPONDING FIELDS OF TABLE LT_MSEG    FOR ALL ENTRIES IN LT_MKPF    WHERE MBLNR 

11、= LT_MKPF-MBLNR    and MJAHR = LT_MKPF-MJAHR    and WERKS IN P_WERKS    AND MATNR IN P_MATNR    AND BWART IN P_BWART.*     ENDIF.示

12、例2:DATA: BEGIN OF it_mara OCCURS 0,matnr LIKE mara-matnr,maktx LIKE makt-maktx,END OF it_mara.DATA: BEGIN OF it_makt OCCURS 0,matnr LIKE mara-matnr,maktx LIKE makt-maktx,END OF it_makt.第一種寫法:(需定義it_mara)Select matnr INTO TABLE it_mara FROM mara.LOOP AT it_mara.Select SINGLE maktx INTO it_mara-maktx

13、FROM maktWhere matnr = it_mara-matnr AND spras = sy-langu.MODIFY it_mara TRANSPORTING maktx. * 只修改maktx字段ENDLOOP. 第二種寫法(需定義it_mara &it_makt): high performaceSelect matnr INTO TABLE it_mara FROM mara.Select matnr maktx INTO TABLE it_makt FROM maktFOR ALL ENTRIES IN it_maraWhere matnr = it_mara-ma

14、tnr and spras = sy-langu.4 wherein對(duì)存在OR條件等判斷的語句,盡量使用IN來代替。5 where條件l Where 語句中盡量避免使用”<” ”>”等模糊條件來查詢。l 不要使用CHECK語句對(duì)table 進(jìn)行條件查詢,用where語句代替。6 Join語句連接多個(gè)表數(shù)據(jù)查詢盡量使用JOIN語句,且注意應(yīng)選擇數(shù)據(jù)量最小的表來作為基表,盡量避免三個(gè)以上的表的相關(guān)JOIN查詢。7 select single在查詢單條語句時(shí),盡量使用select single語句,不要使用selectendselect語句。8 Up to n rows使用語法up to

15、 n rows來實(shí)現(xiàn)對(duì)數(shù)據(jù)前n項(xiàng)的查詢。9 Select 欄位盡量具體盡量使用select f1 f2具體欄位來代替select * 寫法。10利用函數(shù)充分利用系統(tǒng)提供的標(biāo)準(zhǔn)函數(shù),如max,min,avg,sum,count.示例(使用max聚合函數(shù)):不推薦Maxnu = 0.Select * from zflight where airln = LF and cntry = IN.Check zflight-fligh > maxnu.Maxnu = zflight-fligh.Endselect.推薦Select max( fligh ) from zflight into max

16、nu where airln = LF and cntry = IN.11使用INTO table 代替select endselect不推薦Refresh: int_fligh.Select * from zflight into int_fligh.Append int_fligh. Clear int_fligh.Endselect.推薦Refresh: int_fligh.Select * from zflight into table int_fligh.TABLE1 RANGE TABLERange Table 為 SAP R/3系統(tǒng)標(biāo)準(zhǔn)內(nèi)表的一種,結(jié)構(gòu)與 Selection Ta

17、ble 一致,由 SIGN, OPTION, LOW 和 HIGH字段組成;可以通過 TYPE RANGE OF 語句或 RANGES 關(guān)鍵字定義 Range Table。1) TYPE RANGE OFDATA rtab TYPE RANGE OF type|LIKE RANGE OF dobj INITIAL SIZE nWITH HEADER LINEVALUE IS INITIALREAD-ONLY. 示例:2) RANGES語法:RANGES rtab FOR dobj OCCURS n.示例:2 兩個(gè)內(nèi)表間賦值l Itab1=itab2示例:tables: zc

18、ustom,scustom.data t1_zcustom type STANDARD TABLE OF zcustom with HEADER LINE.data t2_zcustom like STANDARD TABLE OF zcustom WITH HEADER LINE.select * from scustom into CORRESPONDING

19、60;FIELDS OF TABLE t1_zcustom.t2_zcustom = t1_zcustom.l APPEND lines of itab2 to itab1(append itab2 to itab1)Itab2 to itab1 還可通過LOOP 語句循環(huán)讀取內(nèi)表實(shí)現(xiàn)。示例1:loop at t1_zcustom.append t1_zcustom to t2_zcustom. 或append lines of t1_zcustom to

20、 t2_zcustom.endloop.以上LOOP循環(huán)雖可實(shí)現(xiàn)內(nèi)表逐行添加,但建議使用批量增加代替逐行添加:不推薦Loop at int_fligh1.Append int_fligh1 to int_fligh2.Endloop.推薦Append lines of int_fligh1 to int_fligh2.示例2:DATA:  begin of it_makt/it_mara OCCURS 0 ,END OF it_makt/it_mara .select matnr maktx from MAKT&#

21、160;INTO TABLE it_makt Where spras = sy-langu.append LINES OF it_makt to it_mara.-TABLES: MARA.DATA LT_MARA LIKE STANDARD TABLE OF MARA WITH HEADER LINE.DATA LT2_MARA LIKE TABLE

22、60;OF LT_MARA WITH HEADER LINE.SELECT * FROM MARA INTO TABLE LT_MARA.APPEND LINES OF LT_MARA  TO LT2_MARA.與上面僅內(nèi)表定義不同。3 COLLECTCollect語句可根據(jù)某些關(guān)鍵列來完成數(shù)值字段的匯總。COLLECT一般在loop中使用,使用collect不需要對(duì)內(nèi)表排序,對(duì)內(nèi)表也沒有其他限制條件。語法如下:COLLECT itab

23、1 INTO itab2 其中itab2 必須定義為哈希表,并指定1個(gè)或多個(gè)關(guān)鍵字段。示例如下,數(shù)值字段有兩個(gè),非數(shù)值字段也有兩個(gè)且定義為KEY ,經(jīng)過下面結(jié)果可以看到,事實(shí)上完成了一個(gè)物料+庫位的一個(gè)分類匯總:tables: mkpf,mseg.data: begin  of  ita,   mblnr type mseg-mblnr,   lgort type mseg-lgort,   menge&#

24、160;type mseg-menge,   dmbtr type mseg-dmbtr,  end of ita .data: itb like ita OCCURS 0 WITH HEADER LINE .data: itc like HASHED TABLE OF ita with UNIQUE KEY

25、 mblnr lgort WITH HEADER LINE.  "定義統(tǒng)計(jì)結(jié)果內(nèi)表(必須是哈希內(nèi)表)SELECT * FROM MSEG INTO CORRESPONDING FIELDS OF TABLE itb  WHERE mblnr BETWEEN '4903037513' AND '4903037514'.loop&

26、#160; at  itb. collect itb into itc.  "按關(guān)鍵列統(tǒng)計(jì)值endloop .write : sy-uline .write : '內(nèi)表數(shù)據(jù):' .loop  at itb.  write : / ' ' ,itb-mblnr,itb-lgort, itb

27、-menge,itb-dmbtr.endloop .write : sy-uline .write : 'collect后的數(shù)據(jù):' .loop  at  itc.  write : / ' ' ,itc-mblnr,itc-lgort, itc-menge,itc-dmbtr.endloop .write : sy-uline .實(shí)現(xiàn)的功能是根據(jù)物料憑證號(hào)+庫位來統(tǒng)計(jì) 移動(dòng)數(shù)量及金額,從結(jié)果來看應(yīng)該是正確的,因?yàn)樯厦鎽{證是311從7012和7018的移庫,數(shù)量肯定相等,金額為0,下面憑證為261發(fā)貨。4 內(nèi)表、字符串及循環(huán)處理l LOOP循環(huán)內(nèi)表時(shí),可根據(jù)需求加上where條件.l 讀取內(nèi)表時(shí)加上擴(kuò)展語句BINA

溫馨提示

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

評(píng)論

0/150

提交評(píng)論