Intro to ABAP - Internal Table
abap学习视频4(内表)(参考模板)

课程目标:(1)理解什么是内表(2)内表如何定义( 3)如何定义和使用工作区(4)如何处理内表中的单个记录、记录集一、什么是内表(大家看abap入门.pdf应该有了一定的认识)内表与结构体基本相似,它同样是程序运行中被临时创建的一个存储空间,是一个可以含多条记录的数据表。
内表是一种数据对象,可以在该表中于运行时存储多个相同的结构化数据记录(表变量)。
数据记录的数量仅由特定系统安装的容量所限制。
ABAP运行时系统会动态管理内部表的大小,也就是说,开发人员不必进行任何内存管理操作。
下列几个属性完全描述了一个内表行类型:行类型描述了表行的结构,一般使用一个结构来定义行类型,不过实际上可以用任何类型。
键:内表的键由若干个指定顺序的键字段组成,内表就会根据几个键字段的先后顺序自动排序。
根据访问类型,键可以分为唯一的和不唯一的,唯一的意味着表中的键字段的值组合在内表中只能出现一次。
表类型:有三种不同的表类型,标准表、排序表和哈希表(散列表),根据使用的访问类型,可以使用相应的表定义以获得更好的性能。
内表中的各数据集称为表行或表项。
出于这个原因,行中的各组件称为内表的字段或列。
内部表的行类型可通过任意数据类型进行指定,并可描述表项的行结构。
因此,内部表是一种以结构化方式处理大型数据集的简单方法。
典型用途包括:(1)保留数据数据库表或序列文件的数据进行后续处理(2)进行数据格式化,用以屏幕或打印机输出(如:排序)(3)进行数据格式化,用以使用其它服务(例如:用于方法、函数模块或子例程调用)内表有3中类型:(1)标准表:standard(2)排序表:sorted(3)哈希表(散列表):Hashed根据不同的访问类型,应选用不同的内表类型。
标准表:以内部方式维护行编号(索引),可进行索引访问和关键字访问如果大多使用索引访问内部表则应选择标准表。
排序表:数据记录会自动以关键值升序进行排序,此处同样以内部方式维护索引。
ABAP-内表用法小结

ABAP 内表用法小结ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的内表支持循环对每行数据进行操作,也支持整体操作内表是具有行和列的表结构,然而,不同于数据库表,内表仅在程序运行期间在内存中存储数据ABAP中有三种内表类型:标准表,哈希表,排序表–ABAP内表数据类型内表数据对象是实际的内表,可以用数据进行填充内表数据类型是用于定义内表数据对象的抽象数据类型(ADT)可以使用的内表数据类型有:Structure数据库表用户自定义数据类型–ABAP内表声明1>TYPES: BEGIN OF line,field1 TYPE i,field2 TYPE i,END OF line.* 声明一个数据类型DATA: ITAB_WA TYPE(LIKE) line. “声明一个内表工作区DATA: ITAB TYPE(LIKE) line OCCURS 0. “声明一个无工作区的内表DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0. “声明一个有工作区的内表DATA: ITAB TYPE(LIKE) line OCCURS 0 WITH HEADER LINE.DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0 WITH HEADER LINE.2>DATA: BEGIN OF line,field1 TYPE i,field2 TYPE i,END OF line.* 声明一个line对象,该对象可以作为工作区使用* 用DATA定义的line本身也是一个结构类型,也可再声明一个工作区DATA: ITAB_WA TYPE(LIKE) line. “声明一个工作区DATA: ITAB TYPE(LIKE) line OCCURS 0 WITH HEADER LINE. “声明一个带工作区的内表DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0 WITH HEADER LINE . “声明一个带工作区的内表3> 直接定义内表,这个内表是有工作区的DATA: BEGIN OF ITAB OCCURS 0 ,CARR1 LIKE SPFLI-CARRID,CONN1 LIKE SPFLI-CONNID,END OF ITAB.* DATA: ITAB1 TYPE ITAB.(错误的,实践证明,定义出来的什么都不是)。
4-Intro to ABAP

Introduction to ABAP (Beginning) ∙第一章Overview (Terms: Program, Report, Module Pool, List)1.ABAP/4 简介ABAP 是 SAP 为了开发应用程序而创建并使用的编程语言。
它包括报表,屏幕,界面,数据转换。
ABAP是事件驱动的编程语言。
用户行为和系统事件控制着整个应用程序的执行。
2.概念程序 --- 一系列 ABAP/4 语句的集合。
报表 --- 输出结果为列表(list)的 ABAP/4 程序模块存储 --- 一系列屏幕的集合列表 --- 一个 ABAP 报表程序产生的输出。
∙第二章相关工具1.程序设计环境 --- ABAP/4 Editora.Editor 的基本功能你可以在 ABAP Editor 中创建,维护,和执行 ABAP 程序。
在Tools菜单中选择ABAP Workbench,单击ABAP Editor按钮:注意:用户创建的程序名必须以Y或Z开头。
ABAP程序编辑器提供许多功能,比如:-- 在显示模式和编辑模式之间转换;-- 剪切,复制,粘贴;-- 撤销(Undo);-- 查找和重复查找;-- 语法检查,包括有限的自动校正;-- ABAP 帮助;♦Program 菜单中包括下列功能:----- Other Program 在当前编辑环境中调入另外一个程序。
----- Save as 将当前内容另存为别的文件。
♦在Goto 菜单中,能迅速进入以下功能:----- Attributes 显示程序属性-----Text elements 编辑标题和表头,选择文本和text symbols----- Variants 创建,改变,或显示变量----- Messages 编辑消息类♦在Utilities 菜单中,能完成以下功能:----- Data Browser 显示数据内容----- Help 与工具栏的‟i‟按钮作用相同----- Breakpoints 设置或移去断点----- Edit Locally 允许程序员在未联机时用NotePad 编辑程序♦在Block/buffer菜单中,能完成以下功能:----- 将程序代码拷贝至任意一个剪贴板中(X,Y,Z)----- 将程序代码拷贝至Windows剪贴板,选择”Copy to clipboard”----- 使用”Insert Comment*”和”Delete Comment*”选项可以在程序中插入或删除注释b.打开或创建一个程序--- 在Repository Browser 中创建程序1)显示一个Development class2)选择Create3)在Development objects对话框中选择Program objects ,并按回车4)在 Program objects对话框中,输入程序名并选择Create5)在Create program 对话框中,确定是否为程序创建TOP include,选择Enter6)如果你选择了创建TOP include,会出现对话框提示你输入名称,然后选择Enter7)在下一个对话框中,输入程序属性,选择Save8)选择Source code 进入ABAP 编辑器创建新程序时,标题,类型和应用类型(application)是必须的。
abap-内表的创建

ABAP-内表的创建一.TYPES,DATA,LIKE区别:1.TYPES与DATA区别:TYPES是用来定义某种类(型)的,需(用DATA语句)实例化以后才可以使用,而DATA是用来定义数据对象(实例变量)的,对于用DATA直接定义的结构体对象(不参照其它结构类型),其同时也是一个结构类型.2.TYPE与LIKE区别:TYPE后面跟随的只能是某种类(型),而LIKE后面可以跟随类型或实例对象,参照结构体对象生成内表时只能用LIKE, 不能用TYPE,因为结构体对象不是类型,只是一种实例对象,参照结构类型生成内表时可以用LIKE也可以用TYPE.其中通过LIKE定义的内表直接拥有参照结构类型的元素结构,而通过TYPE定义的内表只能间接拥有被参照结构类型的元素结构,结构类型不能作为内表的工作区,只有结构体对象才可以.二.内表的创建方式一:TYPES: BEGIN OF line,field1 TYPE i,field2 TYPE i,END OF line.现在只定义一个类型接下来你可以定义一个工作区:DATA: ITAB_WA TYPE(LIKE) line.接下来定义一个无工作区的内表:DATA: ITAB TYPE(LIKE) line OCCURS 0.DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0.定义一个有工作区的内表:DATA: ITAB TYPE(LIKE) line OCCURS 0 WITH HEADER LINE.DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0 WIT H HEADER LINE.方式二:你可以直接用DATA来定义,例如:DATA: BEGIN OF line,field1 TYPE i,field2 TYPE i,END OF line.这时候line本身就是一个对象,它当然可以当作工作区来使用,这时你就不用再定义一个工作区了(当然你如果愿意也可以自定义一个工作区)。
ABAP-内表用法小结

ABAP 内表用法小结ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的内表支持循环对每行数据进行操作,也支持整体操作内表是具有行和列的表结构,然而,不同于数据库表,内表仅在程序运行期间在内存中存储数据ABAP中有三种内表类型:标准表,哈希表,排序表–ABAP内表数据类型内表数据对象是实际的内表,可以用数据进行填充内表数据类型是用于定义内表数据对象的抽象数据类型(ADT)可以使用的内表数据类型有:Structure数据库表用户自定义数据类型–ABAP内表声明1>TYPES: BEGIN OF line,field1 TYPE i,field2 TYPE i,END OF line.* 声明一个数据类型DATA: ITAB_WA TYPE(LIKE) line. “声明一个内表工作区DATA: ITAB TYPE(LIKE) line OCCURS 0. “声明一个无工作区的内表DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0. “声明一个有工作区的内表DATA: ITAB TYPE(LIKE) line OCCURS 0 WITH HEADER LINE.DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0 WITH HEADER LINE.2>DATA: BEGIN OF line,field1 TYPE i,field2 TYPE i,END OF line.* 声明一个line对象,该对象可以作为工作区使用* 用DATA定义的line本身也是一个结构类型,也可再声明一个工作区DATA: ITAB_WA TYPE(LIKE) line. “声明一个工作区DATA: ITAB TYPE(LIKE) line OCCURS 0 WITH HEADER LINE. “声明一个带工作区的内表DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0 WITH HEADER LINE . “声明一个带工作区的内表3> 直接定义内表,这个内表是有工作区的DATA: BEGIN OF ITAB OCCURS 0 ,CARR1 LIKE SPFLI-CARRID,CONN1 LIKE SPFLI-CONNID,END OF ITAB.* DATA: ITAB1 TYPE ITAB.(错误的,实践证明,定义出来的什么都不是)。
SAP应用及ABAP开发最佳实践—Internal Table

Internal Table内表王钊/HyWise2008.11.18变更记录初次发布1.02008-11-18王钊Detail contentsVersion Date Producer什么是内表•ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据•不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的•内表支持循环对每行数据进行操作,也支持整体操作•内表是具有行和列的表结构,然而,不同于数据库表,内表仅在程序运行期间在内存中存储数据•ABAP中有三种内表类型:标准表,哈希表,排序表(本手册只介绍常用的内表类型—标准表)内表数据类型•内表数据对象是实际的内表,可以用数据进行填充•内表数据类型是用于定义内表数据对象的抽象数据类型(ADT)•可以使用的内表数据类型有:•Structure•数据库表•用户自定义数据类型•使用Structure类型•DATA <itab> TYPE (STANDARD)TABLE OF <structure>.•如:•使用数据库表•DATA <itab> TYPE (STANDARD)TABLE OF <DB Table>.•如:•使用用户自定义数据类型•首先定义数据类型•TYPES:BEGIN OF <type>,•<field1>,•<field2>,•……•END OF <type>.•然后定义内表•DATA <itab> TYPE (STANDARD)TABLE OF <type>.•如:•内表是按行进行访问的,然而,程序对内表的行操作不能直接进行,必须使用一种接口来传输,这个接口就是工作区(Work Area)•工作区对内表的行必须是可转换的,出于安全性考虑,为了保持数据一致性,建议工作区与内表行具有相同的结构•语法:•DATA <wa> LIKE LINE OF <itab>.•如:•ABAP还提供了一种简单的工作区定义方式,即在创建内表对象的同时隐式地定义一个同名工作区,这个同名工作区就叫做表头行•语法:•在内表定义语句后追加关键字WITH HEADER LINE.•如:•使用带表头行的内表会给内表操作带来方便,但是会增加混淆,降低代码可读性•不带表头行的内表•APPEND <wa> TO <itab>.•如:•带表头行的内表•APPEND <itab>.•如:•不带表头行的内表•INSERT <wa> INTO [TABLE] <itab> [INDEX <idx>].•如:•带表头行的内表•INSERT [TABLE] <itab> [INDEX <idx>].•如:•不带表头行的内表•READ TABLE <itab> INTO <wa> INDEX <idx>.•如:•带表头行的内表•READ TABLE <itab> INDEX <idx>.•如:•不带表头行的内表•MODIFY <itab> FROM <wa> INDEX <idx>.•如:•带表头行的内表•MODIFY <itab> INDEX <idx>.•如:•带表头行与不带表头行语法一致•DELETE <itab> INDEX <idx>.•如:循环处理•LOOP语句可以顺序地逐行读取内表数据•在循环体中可以对工作区中的数据进行各种处理,如输出,运算等,也可以对内表行进行新增,修改,删除等操作•循环体中的MODIFY,DELETE等语句不必指定INDEX项,系统默认处理当前行•如果不需要读取所有的内表行,可以使用WHERE选项进行限制•不带表头行的内表•LOOP AT <itab> INTO <wa> [WHERE <conditions>].•……•<statement block>•……•ENDLOOP.•如:•带表头行的内表•LOOP AT <itab> [WHERE <conditions>].•……•<statement block>•……•ENDLOOP.•如:•注意:•在LOOP循环中,应当尽量避免对当前内表进行插入或填充操作,一旦循环终止条件遗漏,就会出现死循环•程序中出现死循环是ABAP程序开发的大忌,一定要引起重视!•不带表头行的内表•CLEAR <itab>.•带表头行的内表:•清空表头行:CLEAR <itab>.•清空表体:CLEAR <itab>[].•对于带表头行的内表,进行清空时,通常的做法是同时清空表体与表头行,可简写为:•CLEAR:<itab>, <itab>[].•根据默认关键字对内表进行排序•SORT <itab> [ASCENDING | DESCENDING] [AS TEXT].•ASCENDING和DESCENDING指定升序还是降序排列,如果不指定,缺省排序方式是升序•AS TEXT影响字符字段的排序方式,如果不使用该选项,系统将按字符平台相应内部编码进行排序,否则,系统根据当前语言按字母顺序排序字符字段•如:•根据指定字段对内表进行排序•SORT <itab> BY <field 1> [ASCENDING | DESCENDING] [AS TEXT]•……•<field n > [ASCENDING | DESCENDING] [AS TEXT].•如:删除重复行•第一步,对内表排序,使重复行相邻•第二步,删除相邻的重复行•DELETE ADJACENT DUPLICATES FROM <itab> [COMPARING <comp>].•如:•将内表中部分或全部的数据行整体插入另一内表(两个内表必须具有相同的或可转换的行结构)•INSERT LINES OF <itab1> [FROM n1] [TO n2] INTO [TABLE] <itab2> [INDEX <idx>].•如:•将内表中部分或全部的数据行整体填充到另一内表(两个内表必须具有相同的或可转换的行结构)•APPEND LINES OF <itab1> [FROM n1] [TO n2] TO <itab2>.•如:•按照条件或者索引删除一组选定行•DELETE <itab> [FROM n1] [TO n2] [WHERE <condition>].•如:•整体复制内表,目标内表原有内容被覆盖(两个内表必须具有相同的或可转换的行结构)•不带表头行的内表之间进行复制:•MOVE <itab1> TO <itab2>.•带表头行的内表之间进行复制:•MOVE <itab1>[] TO <itab2>[].•不带表头行的内表复制到带表头行的内表:•MOVE <itab1> TO <itab2>[].•带表头行的内表复制到不带表头行的内表:•MOVE <itab1>[] TO <itab2>.•如:•两个内表行结构不一致时,对同名的具有相同的或可转换结构的字段进行复制•在循环中使用MOVE-CORRESPONDING <wa1> TO <wa2>.语句将工作区wa1中的数据复制到wa2的同名字段中,然后进行压表操作•如:判断内表是否为空•第一步,获取内表行数•DESCRIBE TALBE <itab> LINES <count>.•第二步,判断行数<count>是否为0•如:。
ABAP6处理内表

Processing Internal TableInternal Table 的宣告ABAP/4的Internal Table 如同其它语言的数组结构, 在操作上可以有复制,删除,新增插入等功能.1.使用TYPE 叙述语法:TYPES <t> <type> OCCURS <n>宣告一个数组<t>, 型态为<type>, 长度为<n>Example:TYPES A TYPE I OCCURS 10.A 是个10个元素的数值Internal TableExample:TYPES:BEGIN OF LINE,COL1 TYPE I,COL3 TYPE I,END OF LINE.TYPES ITAB TYPE LINE OCCURS 0.宣告一个Internal Table ITAB, 总共有10个元素, 其WORK AREA 名称为LINE2.使用DATA 叙述若使用DATA叙述来宣告Internal Table, 可分成要不要有HEADER LINE, HEADER LINE 就是所谓的WORK AREA, 用在数据的存取上.语法:DATA <f> <type> OCCURS <n> [WITH HEADER LINE]Example:DATA VECTOR TYPE I OCCURS 10 WITH HEADER LINE.3.直接宣告, 不使用WORK AREA语法:DATA: BEGIN OF <f> OCCURS <n>,<component 宣告>END OF <f>.Example:DATA:BEGIN OF ITAB OCCURS 10,COL1 TYPE I,COL2 TYPE I,END OF ITAB.如此产生的Internal Table 不会有Work Area, 也就是宣告时不会Reference 其它的Conponent 宣告Append Line语法:APPEND [<wa>] TO [Initial Line To] <itab>[Initial Line To] 为增加一预设初值的元素Example: 使用Work AreaDATA:BEGIN OF LINE,COL1 TYPE I,COL2 TYPE I,END OF LINE.DATA ITAB LIKE LINE OCCURS 10.DO 2 TIMES.LINE-COL1 = SY-INDEX. “SY-INDEX为迥圈的CounterLINE-COL2 = SY-INDEX **2.APPEND LINE INTO ITAB. “新增至Internal Table中ENDDO.LOOP AT ITAB INTO LINE. “ITAB 总共有两个元素WRITE: / LINE-COL1,LINE-COL2.ENDLOOP.执行结果为:1 12 4Example: 不使用Work AreaDATA: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.APPEN D ITAB. “新增至Internal Table中ENDDO .LOOP AT ITAB. “ITAB 总共有两个元素WRITE: / ITAB-COL1,ITAB-COL2.ENDLOOP.执行结果为:1 12 4加入另一Internal Table的元素语法:APPEND LINES OF <itab1> [FROM <n1>] [TO <n2>] TO <itab2> 将<itab1>的元素加入至<itab2>中, 可选取自<n1>至<n2>的范围Example:APPEND LINES OF ITAB TO JTAB.将ITAB所有元素加入JTAB中Collect Line在加入新元素时将有相同standard key(非数值字段)的数值字段汇总语法:COLLECT [<wa> INTO] <itab>Example:DATA:BEGIN OF ITAB OCCURS 3,COL1(3) TYPE C,COL2 TYPE I,END OF ITAB.ITAB-COL1 = ‘ABC’.ITAB –COL2 = 10.COLLECT ITAB.ITAB-COL1 = ‘XYZ’.ITAB-COL2 = 20.COLLECT ITAB.ITAB-COL1 = ‘ABC’.ITAB-COL2 = 30.COLLECT ITAB. “汇总COL2 至COL1=ABC 的元素上LOOP AT ITAB.WRITE: / ITAB-COL1,ITAB-COL2.ENDLOOP.执行结果:ABC 40XYZ 20Insert Line插入元素在指定的Internal Table位置之前语法:INSERT [<wa> INTO] [INITIAL LINE INTO] <itab> [INDEX <idx>] Example: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 *10.LINE-COL2 = SY-INDEX *20.APPEND LINE INTO ITAB.ENDDO.LINE-COL1=100.LINE-COL2=200.INSERT LINE INTO ITAB INDEX 2. “插入在位置2之前LOOP AT ITAB INTO LINE.WRITE: / SY-TABIX,LINE-COL1,LINE-COL2. “SY-TABIX为Table位置ENDLOOP.执行结果:1 10 202 100 200 “插入的元素3 20 404 30 60插入另一Internal Table元素语法:INSERT LINES OF <itab1> [FROM <n1> TO <n2>] TO <itab2> INDEX <idx>将<itab1>的元素插入至<itab2>中, 位置在<idx>之前, 可选取自<n1>至<n2>的范围Example:INSERT LINES OF ITAB TO JTAB INDEX 3.将ITAB所有元素插入JTAB中, 位置在第三个元素之前Internal Table元素数据的读取语法:LOOP AT <itab> [INTO <wa>] [FROM <n1> TO <n2>] [WHERE <condition>] <loop expression>ENDLOOP .根据设定的范围选取原素资料, 读完后自动移往下一笔Example:LOOP AT ITAB INTO LINE WHERE COL1 >100.WRITE: / SY-TABIX,LINE-COL1.ENDLOOP.仅读取COL1 > 100 的元素读取Internal Table指定位置的元素语法:READ TABLE <itab> [INTO <wa>] INDEX <idx>自指定位置<idx> 读取元素数据Example:READ TABLE ITAB INTO LINE INDEX 5读取ITAB的第5个元素数据, 放入LINE的字段中根据字段内容寻找语法:READ TABLE <itab> INTO <wa>Example:ITAB-COL1 = ‘ABC’.READ TABLE ITAB INTO LINE.找出ITAB 中COL1 字段内容是ABC 的元素, 找到的值放入LINE 中若找到SY-SUBRC传回0, 找不到则传回4, <itab>必须宣告有work area异动元素内容语法:MODIFY<itab> [FROM <wa>] [INDEX <idx>] [TRANSPORTING <f1>…<f2>] [WHERE <condition>]TRANSPORTING <f1> ..<f2> : 指定异动的字段名称Example:LINE-COL1 = 4.LINE-COL2 = 100.MODIFY ITAB FROM LINE.将目前位置元素以LINE的内容异动Example:LINE-COL1 = 10.MODIFY ITAB FROM LINE INDEX 3 TRANSPORTING COL1.将第三个元素的COL1字段异动为10Delete Lines删除Internal Table 的元素语法:DELETE <itab> INDEX <idx>Example:DELETE ITAB INDEX 4删除第四个元素加上删除条件:DELETE <itab> [FROM <n1> TO <n2>] [WHERE <condition>Example:DELETE ITAB FROM 3 TO 10.删除第3至第10个元素LINE-COL1 = 4.LINE-COL2 = 100.DELETE ITAB FROM LINE.Internal Table Sorting语法:SORT <itab> [<ord er>] [BY <f1>] ….[<order>] : 可分成递减(DESCENDING)和递增(ASCENDING), 空白表ASCENDING <f1>:为指定的字段Example:SORT ITAB DESCENDING BY COL2.将ITAB 根据COL2字段递减排序计算数值字段总和语法:SUM计算得总和存在work area 中, 但只能存在LOOP 叙述中Example:LOOP AT ITAB INTO LINE.SUM.ENDLOOP.WRITE: / LINE-COL1,LINE-COL2.LINE-COL1 和LINE-COL2 存数值总和Initial Table1.REFRESH <itab>使用在没有HEADER LINE 的Internal Table中, 清除所有元素Example:REFRESH ITAB.2. CLEAR <itab>[ ]使用在有HEADER LINE 的Internal Table中, 清除所有元素Example:CLEAR ITAB[ ].3.FREE <itab>释放(Release) Internal Table所占的内存空间, 用在REFRESH和CLEAR指令之后Example:FREE ITAB.。
2.ABAP internal tables

Internal Tables: Table Types
ANY TABLE INDEX TABLE HASHED TABLE
STANDARD TABLE
SORTED TABLE
Access with index Access with key Unique/ non-unique key Access using
Time
Copyright ⓒ 2002 by eWareSystem .
APPEND <itab>. MODIFY <itab> INDEX <n>. LOOP AT <itab>. WRITE <itab>-<field>. ENDLOOP. READ TABLE < itab> INDEX <n>. WRITE <itab>-<field>.
Copyright ⓒ 2002 by eWareSystem .
n
n
NON- UNIQUE
UNIQUE | NON-UNIQUE
UNIQUE
mainly index
mainly keys
only keys
Copyright ⓒ 2002 by eWareSystem .
Internal Tables: Defining Internal Tables
TYPES
Copyright ⓒ 2002 by eWareSystem .
Example: Reading internal Tables Using Keys
LOOP AT it_flightinfo INTO wa_flightinfo WHERE carrid = 'LH'. WHERE carrid = 'LH' WRITE: / wa_flightinfo-carrid, wa_flightinfo-connid, wa_flightinfo-fldate, wa_flightinfo-seatsmax, wa_flightinfo-seatsocc, wa_flightinfo-percentage, '%'. ENDLOOP. READ TABLE it_flightinfo INTO wa_flightinfo WITH TABLE KEY carrid = 'LH' carrid 'LH'. connid = '0400' sy-datum. fldate = sy-datum. IF sy-subrc = 0. WRITE: / wa_flightinfo-seatsmax, wa_flightinfo-seatsocc, wa_flightinfo-percentage, '%'. ENDIF.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BC170_07.4
Data Structures & Internal Tables
Declaring a Structure - Method #2
REPORT Yxxxxxxx. TYPES: BEGIN OF ADDR, FLAG,
Basic Syntax: TYPES: BEGIN OF <name1>, <field1> . . . , <field2> . . . ,
BC170_07.6 Data Structures & Internal Tables
Internal Table Types
Table type Search Technique Access time in relation to the number of table entries Linear
BC170_07.3
Data Structures & Internal Tables
Declaring a Structure - Method #1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 REPORT YN1C0008. TABLES: TABNA. DATA: BEGIN OF ADDRESS, FLAG TYPE C, ID LIKE TABNA-ID, NAME1 LIKE TABNA-NAME1, CITY LIKE TABNA-CITY, END OF ADDRESS. MOVE ‘X’ TO ADDRESS-FLAG. MOVE ‘0001’ TO ADDRESS-ID. MOVE ‘Smith’ TO ADDRESS-NAME1. MOVE ‘Philadelphia’ TO ADDRESS-CITY. WRITE ADDRESS.
BC170_07.2
Data Structures & Internal Tables
Data Structures
Structure Address List LN FN City ST.
Internal Table Address List LN LN LN FN FN FN City City City ST. ST. ST.
BC170_07.5 Data Structures & Internal Tables
Populating a Structure with Field-by-Field Transport
REPORT Y170DM37. TABLES: EMPLOYEE. DATA: BEGIN OF ADDRESS, FLAG, ID NAME CITY LIKE EMPLOYEE-ID, LIKE EMPLOYEE-NAME1, LIKE EMPLOYEE-CITY,
END OF ADDR. DATA: ADDRESS TYPE ADDR. ‘X’ TO ADDRESS-FLAG, ‘00001’ TO ADDRESS-ID, ‘Smith’ TO ADDRESS-NAME1, ‘Philadelphia’ TO ADDRESS-CITY.
MOVE:
WRITE ADDRESS.
Data Structures and Creating Internal Tables
BC170_07.1
Data Structures & Internal Tables
Objectives
• The participants will be able to: – Create a Structure in an ABAP Program – Create an Internal Table in an ABAP program – Populate an Internal Table with data – Read Database information into an Internal Table
BC170_07.13
Data Structures & Internal Tables
Loading an Internal Table with a Header Line
REPORT Y170DM42. TABLES: EMPLOYEE. TYPES: BEGIN OF EMP, COUNTRY LIKE EMPLOYEE-COUNTRY, ID SALARY END OF EMP. DATA: EMPTAB TYPE STANDARD TABLE OF EMP INITIAL SIZE 10 WITH HEADER LINE. LIKE EMPLOYEE-ID, LIKE EMPLOYEE-SALARY,
• Standard • Sorted • Hashed
BC170_07.8
Data Structures & Internal Tables
Creating an Internal Table with Header Line
REPORT Y170DM38. TABLES: EMPLOYEE. TYPES: BEGIN OF EMP, ID NAME1 LIKE EMPLOYEE-ID, LIKE EMPLOYEE-NAME1,
With both versions of the APPEND statement, memory space for ten records is allocated when the first record is written to the internal table.
Example 1
The TYPES statement defines the structure and data type for the internal table. The DATA statement with an INITIAL SIZE creates the actual internal table capable of storing data. Because of the WITH HEADER LINE addition, this internal table is created with a header line.
BC170_07.9
Data Structures & Internal Tables
Internal Table Keys
• Implicit Key – All character fields • Explicit Key – User-defined • e.g. … WITH [ UNIQUE/NON-UNIQUE ] KEY FIELD1 FIELD2 ...
ID NAME1 COUNTRY
COUNTRY LIKE EMPLOYEE-COUNTRY, END OF IT_EMP. SELECT * FROM EMPLOYEE. MOVE-CORRESPONDING EMPLOYEE TO IT_EMPTAB. APPEND IT_EMPTAB. ENDSELECT.
Standard
Linear
Sorted
Binary
Logarit hmic
Hashed
Hash Algorithm
Constant (number of entries has no effect)
BC170_07.7
Data Structures & Internal Tables
Internal Table Types
ID
NAME1 CITY
LIKE EMPLOYEE-ID,
LIKE EMPLOYEE-NAME1, LIKE EMPLOYEE-CITY,
... ,
END OF <name1>. DATA: <name2> TYPE <name1>. Address Structure
Flag ID Name1 City
Is this statement necessary for the code?
Basic Syntax: DATA: BEGIN OF <name> <field1> . . . <field2> . . . ... END OF <name>.
Address Structure
Flag ID Name1 City
BC170_07.10
Data Structures & Internal Tables
Size of an Internal Table
BC170_07.11
Data Structures & Internal Tables
Creating an Internal Table With OCCURS Clause
REPORT YINTRODEMO6. TABLES: EMPLOYEE. DATA: BEGIN OF IT_EMP OCCURS 0, ID NAME1 LIKE EMPLOYEE-ID, LIKE EMPLOYEE-NAME1,
The TYPES statement is not used. The DATA statement is used with the OCCURS clause creates the internal table object. The header line is created automatically. The structure of the internal table is defined with BEGIN OF … and END OF <itab>.
BC170_07.12
Data Structures & Internal Tables