ABAPInternalTable

上传人:大米 文档编号:571256726 上传时间:2024-08-09 格式:PPT 页数:33 大小:818KB
返回 下载 相关 举报
ABAPInternalTable_第1页
第1页 / 共33页
ABAPInternalTable_第2页
第2页 / 共33页
ABAPInternalTable_第3页
第3页 / 共33页
ABAPInternalTable_第4页
第4页 / 共33页
ABAPInternalTable_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《ABAPInternalTable》由会员分享,可在线阅读,更多相关《ABAPInternalTable(33页珍藏版)》请在金锄头文库上搜索。

1、ABAP-Internal-TableABAP-Internal-Table结结构构、工作、工作区区、内内表表n结构(Structure)n工作区(Work area)n内表(Inner table)8/9/20242结结构构n属于复杂类型,内容包含定义的数据字段n TYPES:BEGIN OF line, id TYPE i, name(30), age type i, END OF line. DATA member TYPE line.定义一个结构体存储员工信息内表 就是多个结构体的动态的排序,可以存储多个员工行数可以动态添加8/9/20243内内表表 工作工作区区n内表:用于在程序运行

2、期间存储多行结构相同的数据n工作区:内表是按行 进行访问的 。必须使用 某个工作区 域作为与表 格互相 传输数据的接口 。n工作区与内表的定义 data:wa_line type line, it_line type table of line.n表头行(with header line):隐式工作区n 读取数据行n 更新数据行n工作区 内表idnameageIdNameage2024/8/94内内表表类型型标准表准表n标准表(standard table或者省略关键字):n系统为每一行数据生成一个逻辑索引;n填充标准表时,可附加在现有行之后或者是插入到指定位置;n程序对内表的寻址操作可以通过

3、关键字或者索引进行;n对内表进行插入、删除等操作时,其数据行在内存中的位置不变,系统近重新排列各数据行的索引值n不能定义唯一关键字,相同关键字的数据可重复出现n标准表的另一种定义方式: data: begin of itab occurs 0, end of itab.8/9/20245内内表表类型型排序表排序表n关键字SORTED TABLE,n也有一个逻辑索引n总是按照关键字升序排序后再进行存储n可按照关键字访问内表行n也可按照逻辑索引寻找内表行,与标准表相同n可以把排序表的关键字定义为唯一关键字或者普通关键字8/9/20246内内表表类型型哈希表哈希表n关键字:HASHED TABLEn

4、无索引,只能通过关键字访问n系统用哈希算法管理表中的数据n寻址一条数据记录的时间与表的行数无关n必须定义且只能定义为唯一关键字n不可能有关键字相同的两行数据出现8/9/20247定定义内内表表n语法格式:TYPES|DATA itab TYPE|LIKE tablekind OF LINETYPE|LINEOBJECT WITH key INITIAL SIZE n with header line.ntablekind: 内表类型nlinetype | lineobject:行结构nkey: 表关键字nInitial size n:内表分配的初始内存大小nwith header line:

5、定义表头行8/9/20248内内表的重要表的重要概概念念逻辑索引索引n对于标准表和排序表,每一条数据记录都有一个逻辑索引n在对标准表和排序表进行插入、删除、附加操作的时候,系统自动的对每一条数据记录赋一个逻辑索引,记录该数据记录在该内表中的逻辑位置(第X行)n对于标准表和排序表,可以通过逻辑索引操作数据行,关键字为INDEX n,表示读取第多少行数据记录8/9/20249内内表的重要系表的重要系统变量量nSY-TABIX,当前内表的当前数据记录的逻辑索引值n内表嵌套循环时,如果需要使用到sy-tabix变量,请尽量把sy-tabix赋给一个变量再进行处理8/9/202410表表关关键字字nWI

6、TH key:指定内表关键字,如不指定,则系统使用默认(标准)关键字n可以用UNIQUE|NON-UNIQUE来决定内表中具有相同关键字的数据记录是否可以重复出现n如果未指定关键字,则默认关键字为非数字和非内表的组件字段。比如内表中含有C,N,P三种类型的字段,则默认关键字为C,N类型的字段8/9/202411初始初始内内存大小存大小n关键字: initial size n nN可以为正数或者0nN值的选择不影响程序执行的正确性,但可能影响执行效率:n如果N设置过小,重新分配内存空间要占用时间n如果N设置过大,则造成内存分配的浪费n如果n为0或者不指定,则程序为内表对象分配8KB的内存8/9/

7、202412工作工作区区(Work Area/Work Space)n程序不能直接进行内表的行操作,需要通过工作区来处理n工作区必须具有与内表行一致或者可以互相转换的结构,通常是与内表行类型相同的结构体n定义内表对象的同时,需要定义一个与该内表行结构相同的工作区供程序使用n添加内表数据时,先给工作区赋值,然后把工作区内的数据添加、插入到内表n修改内表数据时,把已定位的内部行内容覆盖工作区的内容,修改工作区内容,再回写8/9/202413工作工作区与内区与内表表数数据交据交换图例例内表工作区读取数据行更新数据行8/9/202414隐式工作式工作区区表表头行行(Header Line)n创建内表的

8、时候隐式地定义一个同名工作区,这个同名工作区就叫表表头行或行或标题行行n语法:DATA itab WITH HEADER LINEn创建内表的时候,通过该附加项决定内表是否带表头行 n创建带表头行的内表,则创建了内表和与内表行结构一致的一致的结构构体体;n对带表头行的内表,不需要指定工作区,系统隐式使用表表头行作行作为工作工作区区n表头行带来方便也增加了混淆:同一语句内表名称可能代表内表或者同名工作区,加代表内表,不带表示表头行8/9/202415行行访问方式方式n通过关键字访问(适合所有内表):n通过索引访问(不适合哈希表):n所有行操作成功,SY-SUBRC为0,否则为非0值标准表排序表哈

9、希表索引访问允许允许不允许关键字访问允许允许允许相同值关键字行可重复可重复或不可重复不可重复推荐访问方式主要通过索引主要通过关键字只能通过关键字2024/8/916行操作性能分析行操作性能分析n标准表:定位一行数据所需时间取决于表的行数,随行线性增长n排序表:定位一行数据所需时间取决于表的行数,随行数对数级增长n哈希表:定位一行数据通过关键字进行,查找速度与行数无关Notes: 程序中使用何种内表,取决于预计需要容纳的数据行数及访问频率:行数很少,用标准表;数据量巨大,且不存在重复行,用哈希表;运行期内必须用某种排序形式出现时,用排序表。多数程序都使用标准表8/9/202417定定义内内表的表

10、的语法法n1.DATA: BEGIN OF ITAB OCCURS 10 , NAME(10) TYEP C, SEX(2) TYPE C, AGE TYPE I, END OF ITAB.n2.DATA: ITAB1 TYPE ITAB.n3.DATA: ITAB1 LIKE ITAB OCCURS 10 n .n4.DATA: BEGIN OF ITAB1 OCCURS 10.n INCLUDE STRUCTURE ITAB.n DATA: END OF ITAB1. 创建和建和处理理内内表表nABAP/4的内表如同其它语言的阵列结构,在操作上可以有复制、删除 和新增插入等功能。n首先使用

11、TYPES创建内表数据类型,然后再用DATA创建对象 语法 TYPES OCCURS . 它定义了一个阵列,类型为,长度为. 例子 TYPES ITAB TYPE I OCCURS 10. DATA TAB1 TYPE ITAB. DATA TAB2 LIKE TAB1. 这是一个拥有10个元素的内表。n直接使用DATA创建内表数据对象 语法 DATA OCCURS WITH HEADER LINE. 例子 DATA VECTOR TYPE I OCCURS 10.创建和建和处理理内内表表nABAP/4对于内表字段都是基于工作区或表头进行引用的。n工作区(Work area)和表头(Heade

12、r line)如同指针一样,它保存着当前或最近一次操作的数据。n内表或者有工作区、或者有表头,二者必具其一。n工作区可以与内表同名,也可以其它名字命名。n创建使用工作区的内表 1、工作区与内表同名: DATA: BEGIN OF ITAB OCCURS 10, LENGTH TYPE I, END OF ITAB. 2、工作区以其它名字命名: DATA: BEGIN OF ITWA, LENGTH TYPE I, END OF ITWA. DATA ITAB LIKE ITWA OCCURS 10. DATA ITAB LIKE table of itwa. n创建带表头的内表 DATA IT

13、AB TYPE I OCCURS 10 WITH HEADER LINE.创建和建和处理理内内表表创建和建和处理理内内表表n向内表中逐条追加记录 语法 APPEND TO 例子 DATA: BEGIN OF ITAB OCCURS 10, COL1 TYPE I, COL2 TYPE I, END OF ITAB. DO 2 TIMES. ITAB-COL1 = SY-INDEX. ITAB-COL2 = SY-INDEX * 2. APPEND ITAB. ENDDO n向一个内表中追加另一个内表的记录 语法 APPEND LINES OF FORM TO TO . 例子:APPEND LI

14、NES OF ITAB1 TO ITAB2. 表示把ITAB1中的所有记录追加到ITAB2中。n用 MODIFY 更改行nMODIFY FROM INDEX . 利用索引可以利用索引可以变更相更相关关行的行的值nMODIFY itab FROM wa TRANSPORTING f1 f2 . WHERE cond.DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF LINE.DATA ITAB LIKE LINE OCCURS 10.DO 3 TIMES. LINE-COL1 = SY-INDEX. LINE-COL2 = SY-INDE

15、X * 2. APPEND LINE TO ITAB.ENDDO.LINE-COL1 = 10. LINE-COL2 = 10 * 2 .MODIFY ITAB FROM LINE INDEX 2.LOOP AT ITAB INTO LINE. WRITE: / SY-TABIX, LINE-COL1, LINE-COL2.ENDLOOP.其输出为: 1 1 1 2 10 100 3 3 9创创建和建和处处理理内内表表创建和建和处理理内内表表n向内表中插入记录 语法 INSERT INTO INITIAL LINE INTO INDEX . 例子 DO 2 TIMES. ITAB-COL1 =

16、 SY-INDEX * 10. ITAB-COL2 = SY-INDEX * 20. APPEND ITAB. ENDDO ITAB-COL1 = 100. ITAB-COL2 = 200. INSERT LINE INTO ITAB INDEX 2. 它表示在第二条记录之前插入一条记录。创建和建和处理理内内表表n在加入新记录时,将非数值字段具有相同内容记录的数值字段汇总。 语法 COLLECT INTO . 例子 DATA: BEGIN OF ITAB OCCURS 10, COL1(3) TYPE C, COL2 TYPE I, END OF ITAB. ITAB-COL1 = ABC.

17、ITAB-COL2 = 100. COLLECT ITAB. ITAB-COL1 = XYZ. ITAB-COL2 = 200. COLLECT ITAB. ITAB-COL1 = ABC. ITAB-COL2 = 300. COLLECT ITAB. 创建和建和处理理内内表表n读取内表中的记录。 语法 LOOP AT INTO FROM TO WHERE . . ENDLOOP. 例子 LOOP AT ITAB. WRITE: / ITAB-COL1,ITAB-COL2. ENDLOOP.读取内表中的行数据读取内表中的行数据读取内表中的行数据读取内表中的行数据创建和建和处理理内内表表n要用索

18、引从 内表中读取 单行,请使 用 READ 语句nREAD TABLE INTO INDEX .n如果找到有 指定索引的 条目,则将 系统字段 SY-SUBRC 设置为0, n而且 SY-TABIX 包含该行的 索引。否则 ,SY-SUBRC 包含非0值 。DATA: BEGIN OF ITAB OCCURS 10, COL1 TYPE I, COL2 TYPE I, END OF ITAB.DO 20 TIMES. ITAB-COL1 = SY-INDEX. ITAB-COL2 = 2 * SY-INDEX. APPEND ITAB.ENDDO.READ TABLE ITAB INDEX 7

19、.WRITE: SY-SUBRC, SY-TABIX.WRITE: / ITAB-COL1, ITAB-COL2.其输出为:其输出为: 0 7 7 14n用自定义关 键字读取单 行nREAD TABLE INTO WITH KEY BINARY SEARCH.n定义一系列 关键字段 .WITH KEY = . = .n如果找到有 适当关键字 的条目,则 将系统字段 SY-SUBRC 设置为0, n并且 SY-TABIX 包含该行的 索引。否则 ,将 SY-SUBRC 设置为非0值 。读取内表中的行数据读取内表中的行数据读取内表中的行数据读取内表中的行数据创建和建和处理理内内表表删除内表中的记录

20、删除内表中的记录删除内表中的记录删除内表中的记录创建和建和处理理内内表表nDELETE INDEX . 它表示删除中的第记录。nDELETE FROM TO WHERE . 它表示删除中符合的记录中的第至条记录。创建和建和处理理内内表表复制内表复制内表MOVE TO .该语句等价 于: = .也可进行多 重赋值,例 如, = = = .也是可能的 。MOVE-CORRESPONDING TO .两个内标结构不一样,相应的字段的赋值注意:这里进行的是整体赋值,而不是一行一行的操作如果内表有表头行 那么应该内表后面加 表示操作整个表, 不加就只操作表头行初始化内表初始化内表初始化内表初始化内表创建

21、和建和处理理内内表表nREFRESH . 它表示清除没有HEADER LINE的内表中的所有记录。nCLEAR . 它表示清除具有HEADER LINE的内表中的所有记录。nFREE . 它表示释放内表所占有的内存空间, 在执行了REFRESH和CLEAR指令之后使用。创建和建和处理理内内表表取表的属性取表的属性取表的属性取表的属性 DESCRIBEDESCRIBEnDESCRIBE TABLE itab LINES line OCCURS n KIND knd.n取得内表的属性 line是内表的行数 n是最初的分配值 knd是内表种类nT为标准表 S为排序表 H为哈希表排序排序排序排序 SORTSORTnSORT itab ASCENDING/DESCENDING BY f1 f2n根据指定字段 升序降序排序结束结束

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号