ImageVerifierCode 换一换
格式:DOCX , 页数:58 ,大小:46.27KB ,
资源ID:25696888      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25696888.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第八章 创建和处理内表.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第八章 创建和处理内表.docx

1、第八章 创建和处理内表 8: 8创建和处理 内表概览内容什么是内表 内表的目的 内表的结构 标识表格行 访问内表 创建内表 创建内表数 据类型 创建内表数 据对象 使 用内表 填充内表 读取内表 更改和删除 内表行 内表排序 创建次序表 循环处理 比较内表 初始化内表 本节讨论内 表。除字段 串外,内表 还构成 ABAP/4 提供的另一 种结构化数 据类型。本节主题描 述在处理内表 中大量的数 据时,花费 的计算机时 间对性能来 说非常关键 。例如,要 获得最佳性 能,在“ABAP/4 开发工作台 ”初始屏幕 (或事务 SE30) 上选择“测 试 - 运行时间分 析 ”,在“内 表”下选定 “

2、提示 & 技巧.”, 就会出现有 关如何改进 性能的不同 任务示例。8什么是内表下列主题提 供内表简介 :8内表的目的在 ABAP/4 中,主要使 用表格。表 格是 R/3 系统中的关 键数据结构 。长期使用 的数据存储 在关系数据 库表格中。 关于如何读 取和处理数 据库表格的 详细信息, 参见 读取并处理数据库表。除了数据库 表格,还可 以创建仅在 程序运行时 间内存在的 内表。ABAP/4 提供了针对 内表的不同 操作。例如 ,可以搜索 、附加、插 入或删除行 。内表中的行 数并不固定 。根据需求 ,系统可实 时增加内表 的大小。例 如,如果想 将某个数据 库表格读入 内表,不必 事先知

3、道数 据库表格的 大小。该特 征项使得内 表使用起来 十分方便, 同时还支持 动态编程。可以使用内 表在数据库 表格的子集 上执行表格 计算。例如 ,可以将数 据库表格的 某个部分读 入内表(参 见 将数据读入内表)。然后可 以从内表中 计算总和或 生成次序表 。内表的另一 种用处是根 据程序需要 重新组织数 据库表格的 内容。例如 ,可以从一 个或多个大 客户表格特 定的数据中 将与创建电 话清单有关 的数据读入 内表中。然 后可在程序 运行期间直 接访问该清 单,而不用 每次调用时 都执行耗时 的数据库查 询。除了在使用 来自数据库 表格的数据 时使用内表 外,内表还 是 ABAP/4 中

4、用于在程 序中实现许 多复杂数据 结构的重要 特征项(参 见 结构化数据类型 (页 36) )。8内表的结构在 ABAP/4 中,可以区 别内表数据 类型(定义 内表的结构 )和内表数 据对象(实 际的内表而 且可以用数 据进行填充 )。内表数 据类型是数 据结构(可 用于将数据 对象说明为 内表)的抽 象定义。关 于数据类型 和数据对象 之间区别的 详细信息, 参见 声明数据 (页 31) 。数据类型内表是 ABAP/4 中两种结构 化数据类型 中的一种。 其它结构化 数据类型是 字段串(参 见 结构化数据类型 (页 36) )。内表包 括任意数据 类型相同的 行。行的数 据类型可以 是基本

5、的或 结构化的。 该定义打开 了多种内表 结构,范围 从包含一个 字段的行到 包含字段串 将内表作为 组件的行。可以用带 OCCURS 参数的 TYPES 语句将数据 类型定义为 内表(参见 创建内表数 据类型 (页 8) )。定义数 据类型时不 占用内存。数据对象数据对象包 含定义为内 表的数据类 型,是实际 使用的内表 。数据对象 占用内存, 可以对其行 进行填充或 读取。可以使用带 OCCURS 参数的 DATA 语句,或使 用 TYPE 或 LIKE 参数引用另 一个内表将 数据对象创 建为内表( 参见 创建内表数 据对象 (页 8) )。8标识表格行为了访问表 格的某一行 ,必须指定

6、 可用于标识 该行的字段 或组合字段 。在关系数 据模型(用 于在 R/3 系统中存储 长期使用的 数据)中, 用于该目的 的最小组合 称为关键字 。定义关键 字的字段称 为关键字段 。在关系数据 模型中,每 个表格至少 有一个关键 字(参见文 档 ABAP/4 词典 (页 Error! Not a valid link.) )。特殊唯 一关键字段 的该概念不 用于内表。但是 ABAP/4 提供了下列 特征项以便 用户访问内 表行:8内表索引索引是表格 行的序列号 ,不是表格 字段,但由 系统自动创 建和管理。可以用 DELETE、 INSERT、 MODIFY、 LOOP 和 READ 语句

7、来使用 索引。在这 些语句中, 可以将索引 指定为文字 或变量。处理完内表 的特定行后 ,系统字段 SY-TABIX 一般包含该 行的索引。8内表关键字有两种类型 的内表关键 字。自定义关键 字使用 READ 语句从内表 中读取行时 ,可以指定 自定义关键 字(参见 用自定义关 键字读取单 行 (页 8) )。缺省关键字根据定义, 内表的关键 字段是非数 字(类型 F、I 和 P)和非内 表的字段。 这些关键字 段形成内表 的标准关键 字。要获得带嵌 套结构(包 含字段串作 为组件的表 格行)的内 表标准关键 字,系统将 子结构分为 基本字段层 次。根据填充内 表的方式不 同,内表可 以包含带

8、相 同标准关键 字的多行。用 COLLECT、 READ、 SORT 和 SUM 语句使用内 表的关键字 段。如果标 准关键字段 是内表行的 第一个组件 ,这有助于 提高这些语 句的效率。 创建内表时 请记住这一 点。8访问内表内表是按行 进行访问的 。必须使用 某个工作区 域作为与表 格互相传输 数据的接口 。工作区域对 内表的行必 须是可转换 的(关于可 转换性的详 细信息,参 见 类型转换 (页 636) )。从内表中读 取数据时, 已定址的表 格行内容覆 盖工作区域 的内容。然 后可以在程 序中引用工 作区域的内 容。将数据 写入内表时 ,必须首先 在工作区域 (从中系统 可以将数据

9、传输给内表 )中输入数 据。 为了避免不 一致,最好 是工作区域 与内表行有 相同的数据 类型。创建 与内表兼容 的工作区域 的一种安全 步骤是在说 明内表和工 作区域时使 用相同的数 据类型。在该环境中 ,可以区分 ABAP/4 中两种类型 的内表的差 别:_ 带表头行 的内表_ 不带表头 行的内表如果创建带 表头行的内 表(参见 创建内表 (页 8) ),系统自 动创建与内 表行数据类 型相同的工 作区域。该 工作区域称 为表头行或 表格工作区 域,对内表 的作用与由 TABLES 语句创建的 数据库表格 工作区域相 同(参见 TABLES 语句 (页 320) )。表格工 作区域和内 表

10、本身同名 。在所有用于 访问内表的 ABAP/4 语句中,可 以指定要使 用的工作区 域(参见 使 用内表 (页 8) )。对于带 表头行的内 表,可以忽 略这一指定 。这样,系 统隐式使用 表格工作区 域:不带表头行 的内表没有 可以隐式使 用的表格工 作区域。要 访问没有表 头行的内表 ,必须在相 应的 ABAP/4 语句中显式 指定工作区 域。决定创建的 内表是否带 表头行时, 必须考虑是 喜欢隐式还 是显式用于 内表访问的 工作区域。请记住,对 于带表头行 的内表,内 表本身和表 格工作区域 同名。如果 在语句中使 用该名称, 系统将其解 释为表格工 作区域的名 称,而不是 表格本身(

11、 对于将数据 读入内存或 从内存中读 取数据的语 句,这一点 例外,参见 ABAP/4 内存中的数据簇 )。但在某 些语句中, 可以在名称 之后输入方 括号,定址 内表而不是 表格工作区 域,如下所 示:。8创建内表创建内表时 ,可以决定 是想先用TYPES 语句创建内 表数据类型 ,然后再创 建具有该类 型的数据对 象,还是想 直接使用 DATA 语句创建内 表数据对象 。既可以创 建带表头行 的内表数据 对象,又可 创建不带表 头行的内表 数据对象。下列主题描 述8创建内表数 据类型要创建内表 数据类型, 请使用 TYPES 语句,用法 如下(参见 TYPES 语句 (页 322) ):语

12、法TYPES OCCURS .该语句通过 使用 TYPES 语句的 OCCURS 选项创建一 个内表数据 类型 。内 表中行的数 据类型在 中指定。要 指定行的数 据类型,可 以使用 TYPE 或 LIKE 参数(参见 DATA 语句的基本格式 (页 314) )。通过使用 LIKE 参数引用 ABAP/4 词典中定义 的对象,可 以创建内表 ,其行结构 与存储在词 典中的对象 相同且反映 数据库表格 的结构。这 在读取和处 理数据库表 格时非常重 要(参见 读取并处理数据库表)。 指定行的初 始号。将第 一行写入用 类型 创建的内表 数据对象之 后,就为指 定行保留了 内存。如果 添加到内表

13、 中的行比 指定的要多 ,则自动扩 展保留的内 存。如果内 存中没有足 够空间可用 于内表,则 将其写入缓 冲区或磁盘 (分页区域 )。TYPES VECTOR TYPE I OCCURS 10.本示例创建 内表数据类 型 VECTOR, 其行包含基 本类型 I 字段。TYPES: BEGIN OF LINE, COLUMN1 TYPE I, COLUMN2 TYPE I, COLUMN3 TYPE I, END OF LINE.TYPES ITAB TYPE LINE OCCURS 10.本示例创建 内表数据类 型 ITAB, 其行与字段 串 LINE 结构相同。TYPES VECTOR T

14、YPE I OCCURS 10.TYPES: BEGIN OF LINE, COLUMN1 TYPE I, COLUMN2 TYPE I, COLUMN3 TYPE I, END OF LINE.TYPES ITAB TYPE LINE OCCURS 10.TYPES: BEGIN OF DEEPLINE, TABLE1 TYPE VECTOR, TABLE2 TYPE ITAB, END OF DEEPLINE.TYPES DEEPTABLE TYPE DEEPLINE OCCURS 10.本示例创建 与上例相同 的内表数据 类型(VECTOR 和 ITAB) 。然后创建 数据类型 DEEP

15、LINE 作为字段串 ,包含这些 内表作为组 件。通过该 字段串,数 据类型 DEEPTABLE 被创建为内 表。因此该 内表的元素 本身就是内 表。8创建内表数 据对象要创建内表 数据对象, 可以有几种 方式使用 DATA 语句(参见 DATA 语句 (页 314) )。可将 DATA 语句用于对于前两种 情况,创建 表头行可选 ,但对于用 新的行结构 创建的表格 ,则必须要 有表头行。8通过引用另 一个表格来 创建内表要通过引用 现有内表数 据类型或数 据对象来创 建内表数据 对象,可使 用 DATA 语句,用法 如下:语法DATA WITH HEADER LINE.通过使用 TYPE 或

16、 LIKE, 可以使用 选项来引用 表格数据类 型或表格数 据对象(关 键这些选项 的详细信息 ,参见 DATA 语句的基本格式 (页 314) )。将数据 对象 说明为结构 相同的内表 。如果使用 WITH HEADER LINE 选项,则创 建的内表带 工作区域 (参见 访问内表 (页 8) )。如果想创建 带表头行的 内表,行类 型不能直接 是内表。但 可以是用内 表作为组件 的结构。TYPES: BEGIN OF LINE, COLUMN1 TYPE I, COLUMN2 TYPE I, COLUMN3 TYPE I, END OF LINE.TYPES ITAB TYPE LINE

17、OCCURS 10.DATA TAB1 TYPE ITAB.DATA TAB2 LIKE TAB1 WITH HEADER LINE.同 创建内表数 据类型 (页 8) 中所示,该 示例创建数 据类型 ITAB 作为内表。 通过使用 DATA 语句的 TYPE 参数引用 ITAB, 使数据对象 TAB1 与 ITAB 结构相同。 通过使用 DATA 语句的 LIKE 参数引用 TAB1, 使数据对象 TAB2 结构相同。 创建的 TAB2 带表头行。 因此,可以 在程序中使 用 TAB2-COLUMN1、 TAB2-COLUMN2 和 TAB2-COLUMN3 等定位表格 工作区域 TAB2。

18、8通过引用结 构来创建内 表要通过引用 现有行结构 创建内表数 据对象,请 使用 DATA 语句,用法 如下:语法DATA OCCURS WITH HEADER LINE.该语句通过 使用 DATA 语句的 OCCURS 选项创建内 表 。内 表中行的数 据类型在 中指定。要 指定数据类 型,可以使 用 TYPE 或 LIKE 参数(关于 这些参数的 详细信息, 参见 DATA 语句的基本格式 (页 314) )。通过使用 LIKE 参数引用 ABAP/4 词典中定义 的对象,可 以创建内表 ,其行结构 与存储在词 典中的对象 相同,并反 映数据库表 格的结构。 这在读取和 处理数据库 表格时

19、非常 重要(参见 读取并处理数据库表)。 指定行的初 始号。将第 一行写入用 类型 创建的内表 数据对象之 后,就为指 定行保留内 存。如果添 加到内表中 的行比 指定的要多 ,则自动扩 展保留的内 存。如果内 存中没有足 够空间可用 于内表,则 将其写入缓 冲区或磁盘 (分页区域 )。上述特征项 与用 TYPES 语句创建内 表数据类型 的特征项相 同(参见 创建内表数 据类型 (页 8) )。作为附加特 征项,可以 在 DATA 语句中使用 WITH HEADER LINE 选项。这样 创建的表格 工作区域 与内表 的行结构相 同(关于表 头行的详细 信息,参见 访问内表 (页 8) )。

20、DATA FLIGHT_TAB LIKE SFLIGHT OCCURS 10.本示例创建 数据对象 FLIGHT_TAB, 其结构与数 据库表格 SFLIGHT 相同。本示例介绍 如何采用两 种不同的步 骤创建同一 内表。TYPES VECTOR_TYPE TYPE I OCCURS 10.DATA VECTOR TYPE VECTOR_TYPE WITH HEADER LINE.在此创建一 个内表数据 类型 VECTOR_TYPE, 其行包含首 先创建的基 本类型 I 字段。然后 ,通过引用 VECTOR_TYPE 创建数据对 象 VECTOR。 通过使用 WITH HEADER LINE

21、选项还创建 表格工作区 域 VECTOR。 在这种情况 下,表格工 作区域包含 一种类型 I 字段,可以 通过名称 VECTOR 定位。DATA VECTOR TYPE I OCCURS 10 WITH HEADER LINE.在这种情况 下,通过直 接在 DATA 语句中使用 OCCURS 选项创建完 全一样的数 据类型 VECTOR。8创建带新结 构的内表要创建既不 引用现有对 象,也不引 用现有行结 构的内表数 据对象,使 用 DATA 语句,用法 如下:语法DATA: BEGIN OF OCCURS , , . END OF .这定义内表 并在 中说明其行 组件。除CCURS 参数外,

22、语 法与定义字 段串相同( 参见 字段串的 DATA 语句 (页 318) )。该语句通常 表格工作区 域 (参 见 访问内表 (页 8) )。因此, 其作用与先 创建字段串 ,然 后再创建与 该字段串行 结构相同的 内表 相同。 指定行的初 始号。将第 一行写入用 类型 创建的内表 数据对象之 后,就为指 定行保留内 存。如果添 加到内表中 的行比 指定的要多 ,则自动扩 展保留的内 存。如果内 存中没有足 够空间可用 于内表,则 将其写入缓 冲区或磁盘 (分页区域 )。DATA: BEGIN OF ITAB OCCURS 10, COLUMN1 TYPE I, COLUMN2 TYPE I

23、, COLUMN3 TYPE I, END OF ITAB.本示例创建 内表及其相 应的表格工 作区域 ITAB。8使 用内表下列主题描 述如何使用 内表。本节 解释:8填充内表要填充内表 ,既可逐行 添加数据, 也可复制另 一个表格的 内容。要逐行填充 内表,可以 使用 APPEND、 COLLECT 或 INSERT 语句。_ 要将内表 仅用于存储 数据,出于 性能方面的 考虑,建议 使用 APPEND。 用 APPEND 也可以创建 序列清单。_ 要计算数 字字段之和 或要确保内 表中没有出 现重复条目 ,请使用 COLLECT 语句,它根 据标准关键 字处理行。_ 要在内表 现有行之前

24、 插入新行, 请使用 INSERT 语句。要将内表内 容复制到另 一个内表中 ,请使用 APPEND、 INSERT 或 MOVE 语句的变式 。_ 要将内表 行附加到另 一个内表中 ,请使用 APPEND 语句的变式 。_ 要将内表 行插入另一 个内表中, 请使用 INSERT 语句的变式 。_ 要将内表 条目内容复 制到另一个 内表中,并 且覆盖该目 标表格,请 使用 MOVE 语句。关于如何使 用 SELECT 语句用数据 库表格中的 数据填充内 表的详细信 息,参见 将数据读入内表。8附加行要将行附加 到内表中, 请使用 APPEND 语句,用法 如下:语法APPEND TO|INIT

25、IAL LINE TO .该语句将新 行附加到内 表 中。通过使用 TO 选项,指定 要附加的源 区域 。 对于带表头 行的表格, 可以忽略 TO 选项。这样 ,表格工作 区域就成了 源区域。可以使用 INITIAL LINE TO 选项替代 TO,将用 其类型的正 确值初始化 的行添加到 表格中。APPEND 不考虑是否 存在标准关 键字相同的 行(参见标识表格行 (页 8) ) 。这样,可 能会出现相 同条目。系统字段 SY-TABIX 在每个 APPEND 语句之后包 含附加行的 索引。DATA: BEGIN OF ITAB OCCURS 10, COL1 TYPE C, COL2 TY

26、PE I, END OF ITAB.DO 3 TIMES. APPEND INITIAL LINE TO ITAB. ITAB-COL1 = SY-INDEX. ITAB-COL2 = SY-INDEX * 2. APPEND ITAB.ENDDO.LOOP AT ITAB. WRITE: / ITAB-COL1, ITAB-COL2.ENDLOOP.本示例创建 带表头行和 两列的内表 ITAB。 表格用 DO 循环填充。 每次通过循 环时附加初 始化行,然 后用循环索 引填充表格 工作区域并 且附加循环 索引的平方 根。其输出 为: 01 1 02 4 03 9DATA: BEGIN OF

27、LINE1, COL1(3) TYPE C, COL2(2) TYPE N, COL3 TYPE I, END OF LINE1.DATA TAB1 LIKE LINE1 OCCURS 10.DATA: BEGIN OF LINE2, FIELD1(1) TYPE C, FIELD2 LIKE TAB1, END OF LINE2.DATA TAB2 LIKE LINE2 OCCURS 1.LINE1-COL1 = abc. LINE1-COL2 = 12. LINE1-COL3 = 3.APPEND LINE1 TO TAB1.LINE1-COL1 = def. LINE1-COL2 = 3

28、4. LINE1-COL3 = 5.APPEND LINE1 TO TAB1.LINE2-FIELD1 = A. LINE2-FIELD2 = TAB1.APPEND LINE2 TO TAB2.REFRESH TAB1.LINE1-COL1 = ghi. LINE1-COL2 = 56. LINE1-COL3 = 7.APPEND LINE1 TO TAB1.LINE1-COL1 = jkl. LINE1-COL2 = 78. LINE1-COL3 = 9.APPEND LINE1 TO TAB1.LINE2-FIELD1 = B. LINE2-FIELD2 = TAB1.APPEND LI

29、NE2 TO TAB2.LOOP AT TAB2 INTO LINE2. WRITE: / LINE2-FIELD1. LOOP AT LINE2-FIELD2 INTO LINE1. WRITE: / LINE1-COL1, LINE1-COL2, LINE1-COL3. ENDLOOP.ENDLOOP.其输出为:Aabc 12 3def 34 5Bghi 56 7jkl 78 9本示例创建 两个不带表 格工作区域 的内表(TAB1 和 TAB2) 。TAB2 有深层结构 ,因为 LINE2 的第二个组 件包含内表 TAB1 的结构。LINE1 被填充并附 加到 TAB1。 然后,将 LIN

30、E2 填充并附加 到 TAB2。 用 REFRESH 语句清除 TAB1 之后(参见 初始化内表 (页 Error! Reference source not found.) ),再重复 相同步骤。 请注意, TAB2 中的行数仅 在 OCCURS 参数中指定 为1。TAB2 的内容输出 。8根据标准关 键字附加行要用有唯一 标准关键字 的行填充内 表,请使用 COLLECT 语句,用法 如下:语法COLLECT INTO .该语句通过 使用 INTO 选项指定想 附加的源区 域 。 如果表格有 表头行,则 可以忽略 INTO 选项。这样 ,表格工作 区域就成了 源区域。系统检查表 格条目的标 准关键字是 否相同(所 有非数字字 段,参见 内表关键字 (页 8) )。如果没 有,COLLECT 语句的作用 与 APPEND 语句相似, 并将新行添 至表格中。如果存在关 键字相同的 条目,COLLECT 语句不附加 新行

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1