ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:112.45KB ,
资源ID:4395597      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4395597.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(SAP ABAP语法实例二.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

SAP ABAP语法实例二.docx

1、SAP ABAP语法实例二SAP ABAP语法实例调试1 调试键 F8跳过后面所有断点,程序执行完2 外部、会话、调试断点调试断点-debug时打的断点,程序远程完后就会消失会话断点-程序运行前通过会话断点按钮打的断点,在同一登录会话不同窗口都有效,用户注销后消失外部断点-程序运行前通过外部断点按钮打的断点,用户注销后再登录还是有效,但只针对同一用户有效Select SELECT FROM INTO WHERE GROUP BY HAVING ORDER BY .GROUP BY:用于将一组数据条目压缩为一个单行作为选择最终结果;HAVING:用于限定ORDER BY子句子数据目组的选择条件;

2、ORDER BY:用于限定行排序;SELECT整体语法结构。示例:以上示例查询的是:20170503至20170510期间销售订单为JR01,且销售量大于50的单据的订单号、创建日期、创建者、类型以及合计销量,并按销售订单升序排序。这里需要强调的是,如果要使用函数(如SUM、MAX、MIN),则需要将其他字段通过GROUP BY 进行分组。如果需要继续对使用函数进行条件筛选,则可以使用关键字HAVING。关键字ORDER BY 决定查询结果的排序方法,ASCENDING为升序,DESCENDING为降序。1 SELECT SINGLE单行数据:SELECT SINGLE INTO FROM .

3、如果系统找到一个完全符合指定条件的行,SY-SUBRC返回0,否则返回4。一般不需要指明所有字段,而是在SELECT后用*符号, 若指定多个数据对象,则需要将这些对象放在括号中,并用逗号隔开,而且其顺序需要与SELECT子句中指明的表字段顺序一致。这里的为结构非内表。示例:TABLES:sflight.DATA:sumTYPEiVALUE0.SELECTSINGLESUM(seatsocc)INTOsumFROMsflightWHEREcarrid=LH.WRITE:/sum.以上实现的是航线为LH的合计座位数。区别以下代码,上面代码只输出一行,下面则输出多行:2 SELECT / ENDSE

4、LECT循环通过SELECT / ENDSELECT循环从数据库中读取多行。SELECT DISTINCT . ENDSELECT.注:使用DISTINCT自动去掉重复的行;SY-DBCNT(系统字段)为每次循环计数.示例:使用distinct达到的效果与select single一样,建议使用select single语句。3 一次性SELECT .INTO一次性把数据选择到一个内表中去。SELECT .INTO|APPENDINGCORRESPONDING FIELDS OFTABLE itab.该情况下SELECT并不启动循环,因而不需要使用ENDSELECT语句;如果itab非空,则S

5、ELECT语句将用读取的数据覆盖其中的内容,使用APPENDING代替INTO将不覆盖内表,若结构不完全相同,也可使用CORRESPONDING FIELDS选项将同名区域相对应。SQL编写注意事项-性能实例1直接内表操作优先尽量不要在频率较高的循环语句中使用updateinsertdeletemodify等操作,即尽量不要通过工作区实现,直接通过操作内表实现。示例:2 select into table优于selectappend table.endselect在对内表赋值时,尽量使用select into table的写法来代替selectappend table.endselect 的写

6、法。尽量用对内表的操作来代替对数据库的操作。示例: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不推荐Loop at int_cntry. Select single

7、* 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.内表可以用来存放多笔数据,OPEN SQL允许以内表数据作为查询条件,以方便对查询对查询数据的进一步的筛选,相关语法如下:Select from FOR ALL ENTRIED IN WHERE 需要注意的是,在FO

8、R ALL ENTRIED IN itab 之前,一定要检查itab表是否为空,若为空则不执行查询,否则会查询所有非条件限制的数据。示例1:CHECKLT_MKPFISNOTINITIAL.*IFP_MATNRISNOTINITIAL.SELECTMBLNRZEILEMJAHRBWARTWERKSMATNRMENGESHKZGFROMMSEGINTOCORRESPONDINGFIELDSOFTABLELT_MSEGFORALLENTRIESINLT_MKPFWHEREMBLNR=LT_MKPF-MBLNRandMJAHR=LT_MKPF-MJAHRandWERKSINP_WERKSANDMAT

9、NRINP_MATNRANDBWARTINP_BWART.*ENDIF.示例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.Se

10、lect SINGLE maktx INTO it_mara-maktx 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 I

11、N it_maraWhere matnr = it_mara-matnr and spras = sy-langu.4 wherein对存在OR条件等判断的语句,尽量使用IN来代替。5 where条件 Where 语句中尽量避免使用”等模糊条件来查询。 不要使用CHECK语句对table 进行条件查询,用where语句代替。6 Join语句连接多个表数据查询尽量使用JOIN语句,且注意应选择数据量最小的表来作为基表,尽量避免三个以上的表的相关JOIN查询。7 select single在查询单条语句时,尽量使用select single语句,不要使用selectendselect语句。8 Up

12、 to n rows使用语法up to n rows来实现对数据前n项的查询。9 Select 栏位尽量具体尽量使用select f1 f2具体栏位来代替select * 写法。10利用函数充分利用系统提供的标准函数,如max,min,avg,sum,count.示例(使用max聚合函数):不推荐Maxnu = 0.Select * from zflight where airln = LF and cntry = IN.Check zflight-fligh maxnu.Maxnu = zflight-fligh.Endselect.推荐Select max( fligh ) from zf

13、light into maxnu 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系统标准内表的一种,结构

14、与 Selection Table 一致,由 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 两个内表间赋值 Itab1=itab2示例:tables:z

15、custom,scustom.datat1_zcustomtypeSTANDARDTABLEOFzcustomwithHEADERLINE.datat2_zcustomlikeSTANDARDTABLEOFzcustomWITHHEADERLINE.select*fromscustomintoCORRESPONDINGFIELDSOFTABLEt1_zcustom.t2_zcustom=t1_zcustom. APPEND lines of itab2 to itab1(append itab2 to itab1)Itab2 to itab1 还可通过LOOP 语句循环读取内表实现。示例1:l

16、oopatt1_zcustom.appendt1_zcustomtot2_zcustom. 或appendlinesoft1_zcustomtot2_zcustom.endloop.以上LOOP循环虽可实现内表逐行添加,但建议使用批量增加代替逐行添加:不推荐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 OCCURS0 ,ENDOF it_makt/it_mara .se

17、lectmatnrmaktxfromMAKTINTOTABLEit_maktWherespras=sy-langu.appendLINESOFit_makttoit_mara.-TABLES:MARA.DATALT_MARALIKESTANDARDTABLEOFMARAWITHHEADERLINE.DATALT2_MARALIKETABLEOFLT_MARAWITHHEADERLINE.SELECT*FROMMARAINTOTABLELT_MARA.APPENDLINESOFLT_MARATOLT2_MARA.与上面仅内表定义不同。3 COLLECTCollect语句可根据某些关键列来完成数值

18、字段的汇总。COLLECT一般在loop中使用,使用collect不需要对内表排序,对内表也没有其他限制条件。语法如下:COLLECT itab1 INTO itab2 其中itab2 必须定义为哈希表,并指定1个或多个关键字段。示例如下,数值字段有两个,非数值字段也有两个且定义为KEY ,经过下面结果可以看到,事实上完成了一个物料+库位的一个分类汇总:tables:mkpf,mseg.data:beginofita,mblnrtypemseg-mblnr,lgorttypemseg-lgort,mengetypemseg-menge,dmbtrtypemseg-dmbtr,endofita.

19、data:itblikeitaOCCURS0WITHHEADERLINE.data:itclikeHASHEDTABLEOFitawithUNIQUEKEYmblnrlgortWITHHEADERLINE.定义统计结果内表(必须是哈希内表)SELECT*FROMMSEGINTOCORRESPONDINGFIELDSOFTABLEitbWHEREmblnrBETWEEN4903037513AND4903037514.loopatitb.collectitbintoitc.按关键列统计值endloop.write:sy-uline.write:内表数据:.loopatitb.write:/,itb

20、-mblnr,itb-lgort,itb-menge,itb-dmbtr.endloop.write:sy-uline.write:collect后的数据:.loopatitc.write:/,itc-mblnr,itc-lgort,itc-menge,itc-dmbtr.endloop.write:sy-uline.实现的功能是根据物料凭证号+库位来统计 移动数量及金额,从结果来看应该是正确的,因为上面凭证是311从7012和7018的移库,数量肯定相等,金额为0,下面凭证为261发货。4 内表、字符串及循环处理 LOOP循环内表时,可根据需求加上where条件. 读取内表时加上扩展语句BI

21、NARY SEARCH. 内表数据增加APPEND ITAB(带表头).或APPEND WA TO ITAB(不带表头). 内表数据更新MODIFY 更新内表时,加上transponding 可以指定更新字段。示例如下:tables:zcustom,scustom.datat1_zcustomlikezcustomOCCURS0WITHHEADERLINE.select*fromscustomintoCORRESPONDINGFIELDSOFtablet1_zcustom.loopatt1_zcustom.t1_zcustom-name=OK1.t1_zcustom-city=OK2.MODI

22、FYT1_ZCUSTOMTRANSPONDINGNAME. endloop.“只更新了name字段。如去掉transponding则内表更新name和city字段。性能实例1 使用二分法查询,提高查询/读取内表数据速度不推荐Read table int_fligh with key airln = LF.推荐(使用前先按关键字排序)Read table int_fligh with key airln = LF binary search.2使用批量修改内表代替逐行修改不推荐Loop at int_fligh.If int_fligh-flag is initial.Int_fligh-flag = X.Endif.Modify int_fligh.Endloop.推荐Int_fligh-flag = X.Modify int_fligh transporting flag where flag is initial.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1