SAP应用及ABAP开发最佳实践—Internal Table

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

0/33InternalTable王钊/HyWise2008.11.18内表1/33变更记录初次发布1.02008-11-18王钊DetailcontentsVersionDateProducer2/33什么是内表•ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据•不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的•内表支持循环对每行数据进行操作,也支持整体操作•内表是具有行和列的表结构,然而,不同于数据库表,内表仅在程序运行期间在内存中存储数据•ABAP中有三种内表类型:标准表,哈希表,排序表(本手册只介绍常用的内表类型—标准表)3/33内表数据类型•内表数据对象是实际的内表,可以用数据进行填充•内表数据类型是用于定义内表数据对象的抽象数据类型(ADT)•可以使用的内表数据类型有:•Structure•数据库表•用户自定义数据类型4/33定义内表•使用Structure类型•DATAitabTYPE(STANDARD)TABLEOFstructure.•如:5/33定义内表•使用数据库表•DATAitabTYPE(STANDARD)TABLEOFDBTable.•如:6/33定义内表•使用用户自定义数据类型•首先定义数据类型•TYPES:BEGINOFtype,•field1,•field2,•……•ENDOFtype.•然后定义内表•DATAitabTYPE(STANDARD)TABLEOFtype.7/33定义内表•如:8/33工作区•内表是按行进行访问的,然而,程序对内表的行操作不能直接进行,必须使用一种接口来传输,这个接口就是工作区(WorkArea)•工作区对内表的行必须是可转换的,出于安全性考虑,为了保持数据一致性,建议工作区与内表行具有相同的结构•语法:•DATAwaLIKELINEOFitab.•如:9/33表头行•ABAP还提供了一种简单的工作区定义方式,即在创建内表对象的同时隐式地定义一个同名工作区,这个同名工作区就叫做表头行•语法:•在内表定义语句后追加关键字WITHHEADERLINE.•如:•使用带表头行的内表会给内表操作带来方便,但是会增加混淆,降低代码可读性10/33填充内表行•不带表头行的内表•APPENDwaTOitab.•如:11/33填充内表行•带表头行的内表•APPENDitab.•如:12/33插入内表行•不带表头行的内表•INSERTwaINTO[TABLE]itab[INDEXidx].•如:13/33插入内表行•带表头行的内表•INSERT[TABLE]itab[INDEXidx].•如:14/33读取内表行•不带表头行的内表•READTABLEitabINTOwaINDEXidx.•如:15/33读取内表行•带表头行的内表•READTABLEitabINDEXidx.•如:16/33修改内表行•不带表头行的内表•MODIFYitabFROMwaINDEXidx.•如:17/33修改内表行•带表头行的内表•MODIFYitabINDEXidx.•如:18/33删除内表行•带表头行与不带表头行语法一致•DELETEitabINDEXidx.•如:19/33循环处理•LOOP语句可以顺序地逐行读取内表数据•在循环体中可以对工作区中的数据进行各种处理,如输出,运算等,也可以对内表行进行新增,修改,删除等操作•循环体中的MODIFY,DELETE等语句不必指定INDEX项,系统默认处理当前行•如果不需要读取所有的内表行,可以使用WHERE选项进行限制20/33循环处理•不带表头行的内表•LOOPATitabINTOwa[WHEREconditions].•……•statementblock•……•ENDLOOP.•如:21/33循环处理•带表头行的内表•LOOPATitab[WHEREconditions].•……•statementblock•……•ENDLOOP.•如:22/33循环处理•注意:•在LOOP循环中,应当尽量避免对当前内表进行插入或填充操作,一旦循环终止条件遗漏,就会出现死循环•程序中出现死循环是ABAP程序开发的大忌,一定要引起重视!23/33清空内表•不带表头行的内表•CLEARitab.•带表头行的内表:•清空表头行:CLEARitab.•清空表体:CLEARitab[].•对于带表头行的内表,进行清空时,通常的做法是同时清空表体与表头行,可简写为:•CLEAR:itab,itab[].24/33数据行排序•根据默认关键字对内表进行排序•SORTitab[ASCENDING|DESCENDING][ASTEXT].•ASCENDING和DESCENDING指定升序还是降序排列,如果不指定,缺省排序方式是升序•ASTEXT影响字符字段的排序方式,如果不使用该选项,系统将按字符平台相应内部编码进行排序,否则,系统根据当前语言按字母顺序排序字符字段•如:25/33数据行排序•根据指定字段对内表进行排序•SORTitabBYfield1[ASCENDING|DESCENDING][ASTEXT]•……•fieldn[ASCENDING|DESCENDING][ASTEXT].•如:26/33删除重复行•第一步,对内表排序,使重复行相邻•第二步,删除相邻的重复行•DELETEADJACENTDUPLICATESFROMitab[COMPARINGcomp].•如:27/33整表操作•将内表中部分或全部的数据行整体插入另一内表(两个内表必须具有相同的或可转换的行结构)•INSERTLINESOFitab1[FROMn1][TOn2]INTO[TABLE]itab2[INDEXidx].•如:28/33整表操作•将内表中部分或全部的数据行整体填充到另一内表(两个内表必须具有相同的或可转换的行结构)•APPENDLINESOFitab1[FROMn1][TOn2]TOitab2.•如:29/33整表操作•按照条件或者索引删除一组选定行•DELETEitab[FROMn1][TOn2][WHEREcondition].•如:30/33整表操作•整体复制内表,目标内表原有内容被覆盖(两个内表必须具有相同的或可转换的行结构)•不带表头行的内表之间进行复制:•MOVEitab1TOitab2.•带表头行的内表之间进行复制:•MOVEitab1[]TOitab2[].•不带表头行的内表复制到带表头行的内表:•MOVEitab1TOitab2[].•带表头行的内表复制到不带表头行的内表:•MOVEitab1[]TOitab2.31/33整表操作•如:32/33整表操作•两个内表行结构不一致时,对同名的具有相同的或可转换结构的字段进行复制•在循环中使用MOVE-CORRESPONDINGwa1TOwa2.语句将工作区wa1中的数据复制到wa2的同名字段中,然后进行压表操作•如:33/33判断内表是否为空•第一步,获取内表行数•DESCRIBETALBEitabLINEScount.•第二步,判断行数count是否为0•如:

1 / 34
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功