




免费预览已结束,剩余27页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ABAP培训,SAP咨询部,结构、工作区、内表,结构(Structure)工作区(Workarea)内表(Innertable),2020/5/12,2,结构,属于复杂类型,内容包含定义的数据字段TYPES:BEGINOFline,idTYPEi,name(30),agetypei,ENDOFline.DATAmemberTYPEline.定义一个结构体存储员工信息内表就是多个结构体的动态的排序,可以存储多个员工行数可以动态添加,2020/5/12,3,内表工作区,内表:用于在程序运行期间存储多行结构相同的数据工作区:内表是按行进行访问的。必须使用某个工作区域作为与表格互相传输数据的接口。工作区与内表的定义data:wa_linetypeline,it_linetypetableofline.表头行(withheaderline):隐式工作区读取数据行更新数据行工作区内表,2020/5/12,4,内表类型标准表,标准表(standardtable或者省略关键字):系统为每一行数据生成一个逻辑索引;填充标准表时,可附加在现有行之后或者是插入到指定位置;程序对内表的寻址操作可以通过关键字或者索引进行;对内表进行插入、删除等操作时,其数据行在内存中的位置不变,系统近重新排列各数据行的索引值不能定义唯一关键字,相同关键字的数据可重复出现标准表的另一种定义方式:data:beginofitaboccurs0,endofitab.,2020/5/12,5,内表类型排序表,关键字SORTEDTABLE,也有一个逻辑索引总是按照关键字升序排序后再进行存储可按照关键字访问内表行也可按照逻辑索引寻找内表行,与标准表相同可以把排序表的关键字定义为唯一关键字或者普通关键字,2020/5/12,6,内表类型哈希表,关键字:HASHEDTABLE无索引,只能通过关键字访问系统用哈希算法管理表中的数据寻址一条数据记录的时间与表的行数无关必须定义且只能定义为唯一关键字不可能有关键字相同的两行数据出现,2020/5/12,7,定义内表,语法格式:TYPES|DATAitabTYPE|LIKEtablekindOFLINETYPE|LINEOBJECTWITHkeyINITIALSIZEnwithheaderline.tablekind:内表类型linetype|lineobject:行结构key:表关键字Initialsizen:内表分配的初始内存大小withheaderline:定义表头行,2020/5/12,8,内表的重要概念逻辑索引,对于标准表和排序表,每一条数据记录都有一个逻辑索引在对标准表和排序表进行插入、删除、附加操作的时候,系统自动的对每一条数据记录赋一个逻辑索引,记录该数据记录在该内表中的逻辑位置(第X行)对于标准表和排序表,可以通过逻辑索引操作数据行,关键字为INDEXn,表示读取第多少行数据记录,2020/5/12,9,内表的重要系统变量,SY-TABIX,当前内表的当前数据记录的逻辑索引值内表嵌套循环时,如果需要使用到sy-tabix变量,请尽量把sy-tabix赋给一个变量再进行处理,2020/5/12,10,表关键字,WITHkey:指定内表关键字,如不指定,则系统使用默认(标准)关键字可以用UNIQUE|NON-UNIQUE来决定内表中具有相同关键字的数据记录是否可以重复出现如果未指定关键字,则默认关键字为非数字和非内表的组件字段。比如内表中含有C,N,P三种类型的字段,则默认关键字为C,N类型的字段,2020/5/12,11,初始内存大小,关键字:initialsizenN可以为正数或者0N值的选择不影响程序执行的正确性,但可能影响执行效率:如果N设置过小,重新分配内存空间要占用时间如果N设置过大,则造成内存分配的浪费如果n为0或者不指定,则程序为内表对象分配8KB的内存,2020/5/12,12,工作区(WorkArea/WorkSpace),程序不能直接进行内表的行操作,需要通过工作区来处理工作区必须具有与内表行一致或者可以互相转换的结构,通常是与内表行类型相同的结构体定义内表对象的同时,需要定义一个与该内表行结构相同的工作区供程序使用添加内表数据时,先给工作区赋值,然后把工作区内的数据添加、插入到内表修改内表数据时,把已定位的内部行内容覆盖工作区的内容,修改工作区内容,再回写,2020/5/12,13,工作区与内表数据交换图例,2020/5/12,14,读取数据行,更新数据行,隐式工作区表头行(HeaderLine),创建内表的时候隐式地定义一个同名工作区,这个同名工作区就叫表头行或标题行语法:DATAitabWITHHEADERLINE创建内表的时候,通过该附加项决定内表是否带表头行创建带表头行的内表,则创建了内表和与内表行结构一致的结构体;对带表头行的内表,不需要指定工作区,系统隐式使用表头行作为工作区表头行带来方便也增加了混淆:同一语句内表名称可能代表内表或者同名工作区,加代表内表,不带表示表头行,2020/5/12,15,行访问方式,通过关键字访问(适合所有内表):通过索引访问(不适合哈希表):所有行操作成功,SY-SUBRC为0,否则为非0值,2020/5/12,16,行操作性能分析,标准表:定位一行数据所需时间取决于表的行数,随行线性增长排序表:定位一行数据所需时间取决于表的行数,随行数对数级增长哈希表:定位一行数据通过关键字进行,查找速度与行数无关Notes:程序中使用何种内表,取决于预计需要容纳的数据行数及访问频率:行数很少,用标准表;数据量巨大,且不存在重复行,用哈希表;运行期内必须用某种排序形式出现时,用排序表。多数程序都使用标准表,2020/5/12,17,定义内表的语法,1.DATA:BEGINOFITABOCCURS10,NAME(10)TYEPC,SEX(2)TYPEC,AGETYPEI,ENDOFITAB.2.DATA:ITAB1TYPEITAB.3.DATA:ITAB1LIKEITABOCCURS10.4.DATA:BEGINOFITAB1OCCURS10.INCLUDESTRUCTUREITAB.DATA:ENDOFITAB1.,创建和处理内表,ABAP/4的内表如同其它语言的阵列结构,在操作上可以有复制、删除和新增插入等功能。首先使用TYPES创建内表数据类型,然后再用DATA创建对象语法TYPESOCCURS.它定义了一个阵列,类型为,长度为.例子TYPESITABTYPEIOCCURS10.DATATAB1TYPEITAB.DATATAB2LIKETAB1.这是一个拥有10个元素的内表。直接使用DATA创建内表数据对象语法DATAOCCURSWITHHEADERLINE.例子DATAVECTORTYPEIOCCURS10.,创建和处理内表,ABAP/4对于内表字段都是基于工作区或表头进行引用的。工作区(Workarea)和表头(Headerline)如同指针一样,它保存着当前或最近一次操作的数据。内表或者有工作区、或者有表头,二者必具其一。工作区可以与内表同名,也可以其它名字命名。,创建使用工作区的内表1、工作区与内表同名:DATA:BEGINOFITABOCCURS10,LENGTHTYPEI,ENDOFITAB.2、工作区以其它名字命名:DATA:BEGINOFITWA,LENGTHTYPEI,ENDOFITWA.DATAITABLIKEITWAOCCURS10.DATAITABLIKEtableofitwa.创建带表头的内表DATAITABTYPEIOCCURS10WITHHEADERLINE.,创建和处理内表,创建和处理内表,向内表中逐条追加记录语法APPENDTO例子DATA:BEGINOFITABOCCURS10,COL1TYPEI,COL2TYPEI,ENDOFITAB.DO2TIMES.ITAB-COL1=SY-INDEX.ITAB-COL2=SY-INDEX*2.APPENDITAB.ENDDO向一个内表中追加另一个内表的记录语法APPENDLINESOFFORMTOTO.例子:APPENDLINESOFITAB1TOITAB2.表示把ITAB1中的所有记录追加到ITAB2中。,用MODIFY更改行MODIFYFROMINDEX.利用索引可以变更相关行的值MODIFYitabFROMwaTRANSPORTINGf1f2.WHEREcond.,DATA:BEGINOFLINE,COL1TYPEI,COL2TYPEI,ENDOFLINE.DATAITABLIKELINEOCCURS10.DO3TIMES.LINE-COL1=SY-INDEX.LINE-COL2=SY-INDEX*2.APPENDLINETOITAB.ENDDO.LINE-COL1=10.LINE-COL2=10*2.MODIFYITABFROMLINEINDEX2.LOOPATITABINTOLINE.WRITE:/SY-TABIX,LINE-COL1,LINE-COL2.ENDLOOP.,其输出为:111210100339,创建和处理内表,创建和处理内表,向内表中插入记录语法INSERTINTOINITIALLINEINTOINDEX.例子DO2TIMES.ITAB-COL1=SY-INDEX*10.ITAB-COL2=SY-INDEX*20.APPENDITAB.ENDDOITAB-COL1=100.ITAB-COL2=200.INSERTLINEINTOITABINDEX2.它表示在第二条记录之前插入一条记录。,创建和处理内表,在加入新记录时,将非数值字段具有相同内容记录的数值字段汇总。语法COLLECTINTO.例子DATA:BEGINOFITABOCCURS10,COL1(3)TYPEC,COL2TYPEI,ENDOFITAB.ITAB-COL1=ABC.ITAB-COL2=100.COLLECTITAB.ITAB-COL1=XYZ.ITAB-COL2=200.COLLECTITAB.ITAB-COL1=ABC.ITAB-COL2=300.COLLECTITAB.,创建和处理内表,读取内表中的记录。语法LOOPATINTOFROMTOWHERE.ENDLOOP.例子LOOPATITAB.WRITE:/ITAB-COL1,ITAB-COL2.ENDLOOP.,读取内表中的行数据,创建和处理内表,要用索引从内表中读取单行,请使用READ语句READTABLEINTOINDEX.如果找到有指定索引的条目,则将系统字段SY-SUBRC设置为0,而且SY-TABIX包含该行的索引。否则,SY-SUBRC包含非0值。,DATA:BEGINOFITABOCCURS10,COL1TYPEI,COL2TYPEI,ENDOFITAB.DO20TIMES.ITAB-COL1=SY-INDEX.ITAB-COL2=2*SY-INDEX.APPENDITAB.ENDDO.READTABLEITABINDEX7.WRITE:SY-SUBRC,SY-TABIX.WRITE:/ITAB-COL1,ITAB-COL2.,其输出为:07714,用自定义关键字读取单行READTABLEINTOWITHKEYBINARYSEARCH.定义一系列关键字段.WITHKEY=.=.如果找到有适当关键字的条目,则将系统字段SY-SUBRC设置为0,并且SY-TABIX包含该行的索引。否则,将SY-SUBRC设置为非0值。,读取内表中的行数据,创建和处理内表,删除内表中的记录,创建和处理内表,DELETEINDEX.它表示删除中的第记录。DELETEFROMTOWHERE.它表示删除中符合的记录中的第至条记录。,创建和处理内表,复制内表,MOVETO.该语句等价于:=.也可进行多重赋值,例如,=.也是可能的。MOVE-CORRESPONDINGTO.两个内标结构不一样,相应的字段的赋值注意:这里进行的是整体赋值,而不是一行一行的操作如果内表有表头行那么应该内表后面加表示操作整个表,不加就只操作表头行,初始化内表,创建和处理内表,REFRESH.它表示清除没
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电商平台售后服务流程再造与创新策略研究
- 2026届云南省化学高二上期末考试试题含答案
- 2026届黑龙江省齐齐哈尔市八中化学高二第一学期期中考试模拟试题含解析
- 2025年注册电气工程师考试 电气工程基础知识押题试卷
- 2025年考研英语(一)阅读理解长难句解析 模拟试卷汇编
- 玩具消毒知识培训总结课件
- 王玲老师月嫂培训知识课件
- 岩土面试题目及答案解析
- 吉林省吉林市吉化一中2026届高三上化学期中教学质量检测试题含解析
- 行业技术规范与市场趋势
- 欧体楷书特征及写法 完整版教学课件
- 【讲座培训】《中小学教育惩戒规则(试行)》解读课件
- 现代农业技术讲座课件
- 建设单位向施工企业施工安全交底
- 学习《中小学教育惩戒规则(试行)》课件
- 初中数学教材解读人教八年级上册(2023年修订)第十三章轴对称等边三角形 导学案
- DB11-T1515-2018养老服务驿站设施设备配置规范
- 政府会计制度应用课件
- 五年级上册美术教学计划
- 西方文论课程教学大纲
- 外科医学—颅内和椎管内血管性疾病
评论
0/150
提交评论