《ABAP开发基础基础内表select语句问题》由会员分享,可在线阅读,更多相关《ABAP开发基础基础内表select语句问题(62页珍藏版)》请在金锄头文库上搜索。
1、ABAPABAP开发基础:基础、内开发基础:基础、内表、表、selectselect语句问题语句问题一个简单的例子一个简单的例子ABAPABAP基础基础内表的应用内表的应用selectselect数据选取数据选取数据库表查询数据库表查询输入输出输入输出销售订单销售订单reportreport最简单的Report(1)一个经典的入门例子一个经典的入门例子一个经典的入门例子一个经典的入门例子通常在程序执行前,需要做以下三件事:1、对所写的代码进行语法检查,避免明显的语法错误。2、保存程序;在程序激活过程中,SAP也会自动对程序进行保存3、激活程序;在SAP中没有激活的程序是不能进行最终使用的。上例
2、最终运行结果如下: 最简单的Report(2)report在ABAP程序中,以report或者program指令开头的程序才能直接运行;其他指令的程序均不可以直接运行。Report程序里,程序的属性类型那需选择“可执行程序”一个简单的例子一个简单的例子ABAPABAP基础基础内表的应用内表的应用selectselect数据选取数据选取数据库表查询数据库表查询输入输出输入输出销售订单销售订单reportreport基本数据类型在ABAP中,基本的数据类型有八种字符型:lC(文本字符)lN(数字文本字符)lT(时间类型)lD(日期类型)数字类型:lI(整数类型)lF(浮点类型)lP(压缩数)lX(
3、十六进制)另,ABAP还提供对字符串的支持,数据类型为string。基本数据类型列表数据类型默认大小有效大小初始值说明示例C1165535SPACE文本字符文本字符(串串)NAMEN116553500.0数字文本数字文本0123T66000000时间时间(HHMMSS)193000D8800000000日期日期(YYYYMMDD)20080808I440整型(整数)整型(整数)99F880浮点数浮点数5E+4P810压缩数压缩数99.99X1165535X0十六进制十六进制3Astring1无限定无限定SPACE字符串字符串(长度可变)(长度可变)AString定义变量(1)定义字段 DATA
4、COLTYPEC.定义行(工作区)DATA:BEGINOFWA,COLTYPEC,ENDOFWA.定义内表DATA:BEGINOFITABOCCURS0,COLTYPEC,ENDOFITAB.定义变量(2)ABAP中对变量的定义有两种方式:DATA根据内置类型声明基本类型数据对象。TYPES根据内置类型自定义基本数据类型。定义变量(3)TYPESnumTYPEi.DATAnum1TYPEnum.算术运算ABAP中,基本的算术运算有这么几种。(+、-、*、/、DIV、MOD、*) 前四种运算意义明确,不再做过多累述。 现在,来看看后三种运算。 DIV整除除法时,如果除不尽,只取商的整数部分。 M
5、OD取余除法时,如果除不尽,只取商的余数部分。 *乘方*是做乘法运算;*则是乘方(即幂运算)。 例: 6DIV4=1;6MOD4=2.1*2=2; 1*2=1.字符数据处理(1)1)concatenate将两个字符串合并成一个字符串。2)split将一个字符串拆分成多个字符串。3)search在字符内查找指定字符串4)replace用其他字符串在字符内替换指定字符串。5)strlen用于确定字符实际长度。6)condense用于清除字符内多余的空格。PS:字符串:字符串string也也是字符的一种。和其是字符的一种。和其他字符类型的区别在他字符类型的区别在于,于,string在定义时,在定义时
6、,不需要指定字符长度不需要指定字符长度,其字符长度会随着,其字符长度会随着存放数据长度的增加存放数据长度的增加自动扩展。自动扩展。字符数据处理(2)结构语句分支控制IFELSEIFELSEENDIFCASEfWHENf1WHENf2ENDCASE循环控制DOnTIMESENDDOWHILEENDWHILE一个简单的例子一个简单的例子ABAPABAP基础基础内表的应用内表的应用selectselect数据选取数据选取数据库表查询数据库表查询输入输出输入输出销售订单销售订单reportreport内表(1)除了数据库表格,还可以创建仅在程序运行时间内存在的内表。ABAP/4提供了针对内表的不同操作
7、。例如,可以搜索、附加、插入或删除行。内表中的行数并不固定。根据需求,系统可实时增加内表的大小。例如,如果想将某个数据库表格读入内表,不必事先知道数据库表格的大小。内表(2)内表的另一种用处是根据程序需要重新组织数据库表格的内容。例如,可以从一个或多个大客户表格特定的数据中将与创建电话清单有关的数据读入内表中。然后可在程序运行期间直接访问该清单,而不用每次调用时都执行耗时的数据库查询。内表的操作:插入APPENDDATA:BEGINOFITABOCCURS0,COL1TYPEI,COL2TYPEI,ENDOFITAB.ITAB-COL1=1.ITAB-COL2=2.APPENDITAB.INS
8、ERTDATALINELIKEITAB.LINE-COL1=3.LINE-COL2=4.INSERTLINEINTOITABINDEX1.数据只能附于内表最后一行数据可以插入内表任意位置内表的操作:修改MODIFYLOOPATITABWHERECOL1=1.ITAB-COL1=5.MODIFYITAB.ENDLOOP.MODIFY前MODIFY后内表的操作:循环读取LOOP使用LOOP语句逐行读取内表。要将内表逐行读入工作区域,可以使用LOOP语句编一个循环。语法如下所示:LOOPATINTOFROMTOWHERE.ENDLOOP.内表的操作:删除DELETEDELETEitabWHEREco
9、l1=1.删除前删除后内表的操作:COLLECTCOLLECT聚集附加操作时,系统将检查工作区中的标准关键字段值与已存在于内表中的数据行是否相(所有非数字字段)。如果不同,COLLECT语句的作用与APPEND语句相似,将新行附加至内表末尾;如果存在相同表关键字值的行,COLLECT语句不附加新行,而是将工作区中数字字段的内容累加到已有数据行中。LH04003.9DL169924.5LH04005.7LH040236.5DL169924.5LH04005.7LH040236.5LH04003.9CARRCONNUMSATZCARRCONNUMSATZAPPENDTOCOLLECTTO9.6内表
10、的操作:SUMSUM该语句只能在LOOP/ENDLOOP块内部使用。如果在AT/ENDAT块中使用SUM,则系统计算当前行组内部所有行的数字字段之和并将其写入目标区域中相应的字段;如果在AT/ENDAT块之外使用SUM语句,则系统计算所有循环过程中(已循环和将要循环的)内表行的数字字段之和并将其写入工作区域中相应的字段。所以,在AT/ENDAT块之外使用SUM语句一般是无意义的。内表的操作:ATATlevelENDAT.该语句只能在LOOP语句内使用,其中行条件level有下列选项:FIRST当前循环为内表的第一行,即当第一次循环操作时,系统会执行控制块语句LAST当循环为内表最后一行。NEW
11、f行组的开头,行组指的是字段f和f前面(即左边)的全部字段,如果行组中的内容不同于上一行,执行语句块中的内容。ENDOFf行组的结尾,如果下一行行组中的任何字段内容不同于上一行,执行语句块中的内容。一个简单的例子一个简单的例子ABAPABAP基础基础内表的应用内表的应用selectselect数据选取数据选取数据库表查询数据库表查询输入输出输入输出销售订单销售订单reportreportSelect语句SELECTSELECTresultFROMsourceINTO|APPENDINGtargetFORALLENTRIESINitabWHEREsql_condGROUPBYgroupHAVIN
12、Ggroup_condORDERBYsort_key.数据选取(1)SELECTcarridconnidseatsoccFROMsflightINTOCORRESPONDINGFIELDSOFTABLEseatsWHEREcarridBETWEENAAANDDLGROUPBYconnidcarridseatsoccHAVINGcarridBETWEENAAANDDLORDERBYseatsocc.数据选取字段数据选取字段数据库表数据库表内表或工作区内表或工作区数据选取范围及输出格式数据选取范围及输出格式数据选取(2)CARRIDCONNIDSEATSOCCCARRIDCONNIDSEATSOC
13、CSEATSOCCCONNIDCARRIDCARRIDCONNIDSEATSOCCSELECTcarridconnidseatsoccFROMsflightINTOTABLEseatsSELECTcarridconnidseatsoccFROMsflightINTOCORRESPONDINGFIELDSOFTABLEseats数据库表内表select single的使用COL1 COL2A1A2A3TABLEselectsingle选择第一个满足条件的值selectsinglecol2intoWAfromTABLEwherecol1=A.结果:COL2值为1。表关联JOIN如果要选取相关联的两
14、个或以上的表内的数据,则需要使用到JOIN。 SELECTaaufnrbdfreiINTOCORRESPONDINGFIELDSOFTABLEitabFROMafkoASaJOINafpoASbONaaufnr=baufnr.selectendselect SELECTcarridconnidseatsoccFROMsflightINTOCORRESPONDINGFIELDSOFTABLEseatsWHEREcarridBETWEENAAANDDLGROUPBYconnidcarridseatsoccHAVINGcarridBETWEENAAANDDLORDERBYseatsocc.SELEC
15、TcarridconnidseatsoccFROMsflightINTOCORRESPONDINGFIELDSOFseatsWHEREcarridBETWEENAAANDDLGROUPBYconnidcarridseatsoccHAVINGcarridBETWEENAAANDDLORDERBYseatsocc.APPENDseats.ENDSELECT.一个简单的例子一个简单的例子ABAPABAP基础基础内表的应用内表的应用selectselect数据选取数据选取数据库表查询数据库表查询输入输出输入输出销售订单销售订单reportreport字段查询(转账表)1事务代码:QS24显示主检验特性
16、场景:需要用到字段主检验特性,却不知道主检验特性数据的存放处。字段查询(转账表)2在主检验特性栏位按下F1字段查询(转账表)3QPMK是转账表,技术信息里表名和字段名称组合起来就是主文件检验特性的存储位置。字段查询(转账表)4字段查询(结构)1这是通过QA33查询到的一笔检验批结果记录。假设,现在需要字段“检验的”的数据。字段查询(结构)2虽然,在技术信息的表名上写着QAQEE,实际上,QAQEE是一个结构。字段查询(结构)3如何确定结构中的字段存储的表? 可以通过该字段的数据元素引用处来进行查询。字段查询(结构)4通过所用处清单来查找出现过数据元素QANZWERTG4的全部转账表。字段查询(
17、结构)5通过所用处清单,还可以查找数据元素在更广泛的范围内的应用。字段查询(结构)6查找结果,数据元素QANZWERTG4在两个表内有被引用。字段查询(结构)7可以看到QAMR是转账表一个简单的例子一个简单的例子ABAPABAP基础基础内表的应用内表的应用selectselect数据选取数据选取数据库表查询数据库表查询输入输出输入输出销售订单销售订单reportreport输出控制:WRITEWRITE语句语句在屏幕上输出数据的基本ABAP语句是WRITE。在屏幕上,输出通常是左对齐的。如果使用几个WRITE语句,输出字段就一个接一个显示,输出之间由列分开(如一个空格)。如果当前行没有足够空间
18、,则开始新行。对齐格式(1)输出屏幕上的数据字段格式,依赖数据类型。预定义数据类型的输出格式数据类型输出长度定位C字段长度左对齐D8左对齐F22右对齐I11右对齐N字段长度左对齐P2*字段长度(1) 右对齐T6左对齐X2*字段长度左对齐数字数据类型F、I和P是右对齐的,左边用空格填充。如果有足够的空间,也输出千位分隔符。如果类型P字段包含小数位,则默认输出长度增加一位。对数据类型D,日期的内部格式与输出格式不同。当输出数据使用WRITE语句时,系统自动以用户主记录中指定的格式(例如,DD/MM/YYYY),输出数据类型D。对齐格式(2)REPORTSAPMTEST.DATANUMBERTYPE
19、PVALUE-1234567.89DECIMALS2.WRITE:Number,NUMBER,ispacked.输出如下:Number1,234,567.89-ispacked字段NUMBER总长为13,即,9位数字(包括小数点)、前导负号和作为分隔符的两个逗号。因为类型P字段的字段长度为8,所以NUMBER字段的输出长度为2*8+1=17。剩余的位置用四个空格填充。这意味着,在文字Number和数字自身之间有五个空格。定位输出:列在屏幕上定位WRITE输出如下所示,通过制定字段名称前面的格式规范,可以在屏幕上定位WRITE语句的输出:语法语法WRITEAT/().此处斜线/表示新的一行是最长
20、为三位数字的数字或变量,表示在屏幕上的位置是最长为三位数字的数字或变量,表示输出长度如果格式规范只包含直接值(即,不是变量),可以忽略关键字AT定位输出:行SKIP语法SKIPn|TOLINEline.SKIPN以当前行为基,向下跳转N行。若N无指定,则默认值为1。SKIPTOLINEline跳转至指定行。格式化选项对WRITE语句,可以使用不同的格式化选项。语法WRITE.所有数据类型的格式化选项选项用途LEFT-JUSTIFIED输出左对齐。CENTERED输出居中。RIGHT-JUSTIFIED输出右对齐。UNDER输出直接开始于字段下。NO-GAP忽略字段后的空格。USINGEDITM
21、ASK指定格式模板。USINGNOEDITMASK撤消对ABAP/4词典中指定的格式模板的激活。NO-ZERO如果字段仅包含零,则用空格代替它们。对类型C和N字段,将自动代替前导零。COLOR输出字段填充颜色。ABAP屏幕输出DATA:G(5)VALUEHello,F(5)VALUEDolly.WRITE:G,F.HelloDollyWRITE:/10G,Hello/FUNDERG.DollyWRITE:/GNO-GAP,F.HelloDollyDATATIMETYPETVALUE154633.WRITE:TIME,154633/(8)TIMEUSINGEDITMASK_:_:_.15:46:
22、33WRITE:000123,000123/000123NO-ZERO.123DATAFLOATTYPEFVALUE123456789.0.WRITEFLOATEXPONENT3.1.23E+08DATAPACKTYPEPVALUE123.456DECIMALS3.WRITEPACKDECIMALS2.123.46WRITE:/PACKROUND-2,12,345.60/PACKROUND-1,1,234.56/PACKROUND1,12.346/PACKROUND2.1.235WRITE:SY-DATUM,06/27/1995/SY-DATUMYYMMDD.950627初始化数据语法CLEA
23、R.该语句将数据对象的内容初始化,可以用CLEAR语句重置任何数据对象值。REFRESHitab.该语句将内表中的数据重置为初始值。选择屏幕的制作PARAMETERSCOL(11)TYPECdefaultHelloWorld.WRITE:10输出:,16COL.选择屏幕(1)选择屏幕的制作,有两种方式parametersselect-optionsparameters:输入的参数值是单值select-options:输入的参数值是多值,也可以是一个范围选择屏幕(2)TABLESafko.PARAMETERSaufnr2LIKEafko-aufnr.SELECT-OPTIONSaufnr1FOR
24、afko-aufnr.一个简单的例子一个简单的例子ABAPABAP基础基础内表的应用内表的应用selectselect数据选取数据选取数据库表查询数据库表查询输入输出输入输出销售订单销售订单reportreport输入屏幕TABLES:vbak.PARAMETERSvbelnLIKEvbak-vbeln.定义变量定义表头DATA:BEGINOFwa_head,vbelnLIKEvbak-vbeln,audatLIKEvbak-audat,kunnrLIKEvbak-kunnr,name1LIKEkna1-name1,ENDOFwa_head.定义行项目DATA:BEGINOFit_itemOC
25、CURS0,vbelnLIKEvbap-vbeln,posnrLIKEvbap-posnr,matnrLIKEvbap-matnr,arktxLIKEvbap-arktx,kwmengLIKEvbap-kwmeng,meinsLIKEvbap-meins,netwrLIKEvbap-netwr,waerkLIKEvbap-waerk,ENDOFit_item.定义行数计数器DATAlineTYPEi.数据选取选取表头数据SELECTSINGLEvbelnaudatkunnrINTO(wa_head-vbeln,wa_head-audat,wa_head-kunnr)FROMvbakWHEREv
26、beln=vbeln.SELECTSINGLEname1INTOwa_head-name1FROMkna1WHEREkunnr=wa_head-kunnr.选取行项目数据SELECTvbelnposnrmatnrarktxkwmengmeinsnetwrwaerkINTOCORRESPONDINGFIELDSOFTABLEit_itemFROMvbapWHEREvbeln=vbeln.屏幕输出DESCRIBETABLEit_itemLINESline.获取内表行数,设置行计数器输出表头WRITE66销售订单CENTERED.WRITE:/30.WRITE:/30,32销售凭证号:,44wa_h
27、ead-vbelnNO-ZERO,88凭证日期:,98wa_head-audat,108.WRITE:/30.WRITE:/30,32售达方:,40wa_head-kunnrRIGHT-JUSTIFIEDNO-ZERO,50wa_head-name1,108.WRITE:/30.输出行项目SKIP2.WRITE:/8.WRITE:/8,10行项目,18,20物料号,38,40物料描述,80,96数量,100,102单位,106,122净价,128,130币制,134.LOOPAT it_itemWHEREvbeln=wa_head-vbeln.IFline0.WRITE:/8.line=line-1.ENDIF.WRITE:/8,10it_item-posnrNO-ZERO,18,20it_item-matnr,38,40it_item-arktx(20),80,82it_item-kwmengDECIMALS2,100,102it_item-meins,106,108it_item-netwrDECIMALS2,128,130it_item-waerk,134.ENDLOOP.WRITE:/8.销售表单结束结束