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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

7、selectappend table.endselect 的寫法。盡量用對內(nèi)表的操作來代替對數(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ù)作為查詢條件,以方便對查詢對查詢數(shù)據(jù)的進一步的篩選,相關語法如下:Select <f1fn&

9、gt; from <dbtab> FOR ALL ENTRIED IN <itab> WHERE 需要注意的是,在FOR ALL ENTRIED IN itab 之前,一定要檢查itab表是否為空,若為空則不執(zhí)行查詢,否則會查詢所有非條件限制的數(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對存在OR條件等判斷的語句,盡量使用IN來代替。5 where條件l Where 語句中盡量避免使用”<” ”>”等模糊條件來查詢。l 不要使用CHECK語句對table 進行條件查詢,用where語句代替。6 Join語句連接多個表數(shù)據(jù)查詢盡量使用JOIN語句,且注意應選擇數(shù)據(jù)量最小的表來作為基表,盡量避免三個以上的表的相關JOIN查詢。7 select single在查詢單條語句時,盡量使用select single語句,不要使用selectendselect語句。8 Up to n rows使用語法up to

15、 n rows來實現(xiàn)對數(shù)據(jù)前n項的查詢。9 Select 欄位盡量具體盡量使用select f1 f2具體欄位來代替select * 寫法。10利用函數(shù)充分利用系統(tǒng)提供的標準函數(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)標準內(nèi)表的一種,結構與 Selection Ta

17、ble 一致,由 SIGN, OPTION, LOW 和 HIGH字段組成;可以通過 TYPE RANGE OF 語句或 RANGES 關鍵字定義 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 兩個內(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)表實現(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)雖可實現(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ù)某些關鍵列來完成數(shù)值字段的匯總。COLLECT一般在loop中使用,使用collect不需要對內(nèi)表排序,對內(nèi)表也沒有其他限制條件。語法如下:COLLECT itab

23、1 INTO itab2 其中itab2 必須定義為哈希表,并指定1個或多個關鍵字段。示例如下,數(shù)值字段有兩個,非數(shù)值字段也有兩個且定義為KEY ,經(jīng)過下面結果可以看到,事實上完成了一個物料+庫位的一個分類匯總: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)計結果內(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.  "按關鍵列統(tǒng)計值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 .實現(xiàn)的功能是根據(jù)物料憑證號+庫位來統(tǒng)計 移動數(shù)量及金額,從結果來看應該是正確的,因為上面憑證是311從7012和7018的移庫,數(shù)量肯定相等,金額為0,下面憑證為261發(fā)貨。4 內(nèi)表、字符串及循環(huán)處理l LOOP循環(huán)內(nèi)表時,可根據(jù)需求加上where條件.l 讀取內(nèi)表時加上擴展語句BINA

溫馨提示

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

最新文檔

評論

0/150

提交評論