




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SAP ABAP语法实例调试1 调试键l F8跳过后面所有断点,程序执行完2 外部、会话、调试断点调试断点-debug时打的断点,程序远程完后就会消失会话断点-程序运行前通过会话断点按钮打的断点,在同一登录会话不同窗口都有效,用户注销后消失外部断点-程序运行前通过外部断点按钮打的断点,用户注销后再登录还是有效,但只针对同一用户有效Select SELECT FROM INTO WHERE GROUP BY HAVING ORDER BY .GROUP BY:用于将一组数据条目压缩为一个单行作为选择最终结果;HAVING:用于限定ORDER BY子句子数据目组的选择条件;ORDER BY:用于限定行排序;SELECT整体语法结构。示例:以上示例查询的是:20170503至20170510期间销售订单为JR01,且销售量大于50的单据的订单号、创建日期、创建者、类型以及合计销量,并按销售订单升序排序。这里需要强调的是,如果要使用函数(如SUM、MAX、MIN),则需要将其他字段通过GROUP BY 进行分组。如果需要继续对使用函数进行条件筛选,则可以使用关键字HAVING。关键字ORDER BY 决定查询结果的排序方法,ASCENDING为升序,DESCENDING为降序。1 SELECT SINGLE单行数据:SELECT SINGLE INTO FROM .如果系统找到一个完全符合指定条件的行,SY-SUBRC返回0,否则返回4。一般不需要指明所有字段,而是在SELECT后用*符号, 若指定多个数据对象,则需要将这些对象放在括号中,并用逗号隔开,而且其顺序需要与SELECT子句中指明的表字段顺序一致。这里的为结构非内表。示例:TABLES:sflight.DATA:sumTYPEiVALUE0.SELECTSINGLESUM(seatsocc)INTOsumFROMsflightWHEREcarrid=LH.WRITE:/sum.以上实现的是航线为LH的合计座位数。区别以下代码,上面代码只输出一行,下面则输出多行:2 SELECT / ENDSELECT循环通过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非空,则SELECT语句将用读取的数据覆盖其中的内容,使用APPENDING代替INTO将不覆盖内表,若结构不完全相同,也可使用CORRESPONDING FIELDS选项将同名区域相对应。SQL编写注意事项-性能实例1直接内表操作优先尽量不要在频率较高的循环语句中使用updateinsertdeletemodify等操作,即尽量不要通过工作区实现,直接通过操作内表实现。示例:2 select into table优于selectappend table.endselect在对内表赋值时,尽量使用select into table的写法来代替selectappend table.endselect 的写法。尽量用对内表的操作来代替对数据库的操作。示例: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 * 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 需要注意的是,在FOR ALL ENTRIED IN itab 之前,一定要检查itab表是否为空,若为空则不执行查询,否则会查询所有非条件限制的数据。示例1:CHECKLT_MKPFISNOTINITIAL.*IFP_MATNRISNOTINITIAL.SELECTMBLNRZEILEMJAHRBWARTWERKSMATNRMENGESHKZGFROMMSEGINTOCORRESPONDINGFIELDSOFTABLELT_MSEGFORALLENTRIESINLT_MKPFWHEREMBLNR=LT_MKPF-MBLNRandMJAHR=LT_MKPF-MJAHRandWERKSINP_WERKSANDMATNRINP_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.Select 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 IN it_maraWhere matnr = it_mara-matnr and spras = sy-langu.4 wherein对存在OR条件等判断的语句,尽量使用IN来代替。5 where条件l Where 语句中尽量避免使用”等模糊条件来查询。l 不要使用CHECK语句对table 进行条件查询,用where语句代替。6 Join语句连接多个表数据查询尽量使用JOIN语句,且注意应选择数据量最小的表来作为基表,尽量避免三个以上的表的相关JOIN查询。7 select single在查询单条语句时,尽量使用select single语句,不要使用selectendselect语句。8 Up 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 zflight 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系统标准内表的一种,结构与 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 两个内表间赋值l Itab1=itab2示例:tables:zcustom,scustom.datat1_zcustomtypeSTANDARDTABLEOFzcustomwithHEADERLINE.datat2_zcustomlikeSTANDARDTABLEOFzcustomWITHHEADERLINE.select*fromscustomintoCORRESPONDINGFIELDSOFTABLEt1_zcustom.t2_zcustom=t1_zcustom.l APPEND lines of itab2 to itab1(append itab2 to itab1)Itab2 to itab1 还可通过LOOP 语句循环读取内表实现。示例1:loopatt1_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 .selectmatnrmaktxfromMAKTINTOTABLEit_maktWherespras=sy-langu.appendLINESOFit_makttoit_mara.-TABLES:MARA.DATALT_MARALIKESTANDARDTABLEOFMARAWITHHEADERLINE.DATALT2_MARALIKETABLEOFLT_MARAWITHHEADERLINE.SELECT*FROMMARAINTOTABLELT_MARA.APPENDLINESOFLT_MARATOLT2_MARA.与上面仅内表定义不同。3 COLLECTCollect语句可根据某些关键列来完成数值字段的汇总。COLLECT一般在loop中使用,使用collect不需要对内表排序,对内表也没有其他限制条件。语法如下:COLLECT itab1 INTO itab2 其中itab2 必须定义为哈希表,并指定1个或多个关键字段。示例如下,数值字段有两个,非数值字段也有两个且定义为KEY ,经过下面结果可以看到,事实上完成了一个物料+库位的一个分类汇总:tables:mkpf,mseg.data:beginofita,mblnrtypemseg-mblnr,lgorttypemseg-lgort,mengetypemseg-menge,dmbtrtypemseg-dmbtr,endofita.data:itblikeitaOCCURS0WITHHEADERLINE.data:itclikeHASHEDTABLEOFitawithUNIQUEKEYmblnrlgortWITHHEADERLINE.定义统计结果内表(必须是哈希内表)SELECT*FROMMSEGINTOCORRESPONDINGFIELDSOFTABLEitbWHEREmblnrBETWEEN4903037513AND4903037514.loopatitb.collectitbintoitc.按关键列统计值endloop.write:sy-uline.write:内表数据:.loopatitb.write:/,itb-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 内表、字符串及循环处理l LOOP循环内表时,可根据需求加上where条件.l 读取内表时加上扩展语句BINARY SEARCH.l 内表数据增加APPEND ITAB(带表头).或APPEND W
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大学生裁判课考试题及答案
- 2025年注册验船师资格考试(A级船舶检验法律法规)冲刺模拟试题及答案二
- 北京市门头沟区2023-2024学年七年级上学期期中考试数学试题及答案
- 2025年调酒技巧与实践应用练习题集
- 2025年教育机构行政岗位招聘笔试模拟卷与解析
- 公务员送分面试题及答案
- 云南省玉溪市师院附中2026届化学高一上期中质量检测模拟试题含解析
- 2025年邮政快递业务高级从业人员面试模拟题及案例分析
- 2025年初级的软件开发工程师考试模拟题集及答案解析
- 2025年新媒体运营师面试预测题与备考指南
- 2025年镍厂招工考试题及答案
- 2024辽宁交投艾特斯技术股份有限公司招聘笔试参考题库附带答案详解
- 财经法规与会计职业道德(第5版)课件 第一章 总论
- 舞蹈艺术概论
- 装卸劳务外包服务项目方案(技术标)
- 2025年农业社会化作业合作协议
- 2025年度互联网行业市场调研服务协议4篇
- 化工设备基础知识培训课件
- 小学音乐新课标考试题库800题(含答案)
- 《Linux培训基础》课件
- 工程职称评定工作总结(3篇)
评论
0/150
提交评论