ABAP之内表

概述

内表是一个临时性的表,只在程序执行的时候发挥作用并且占用内存。 内表通过使用ABAP语言处理大量数据,当我们需要从数据库中提取一个数据的时候,首先将数据库中的数据传到内表中,然后用户可以直接访问和使用此内表来获取信息,内表的相当于起到了中间人的作用。

内表中的数据存储在行和列中, 每一行叫行,每一列叫字段。 在数据库的表中,每一行叫做字段,每一列叫做元素。内表的所有记录具有相同的结构和关键字,使用索引或关键字访问内部表的各个记录。 

在编写代码时,内表必须以程序可以使用的方式进行结构化,内部表的操作方式与结构相同。 主要区别是结构只有一行,而内表可以有所需的行。

内表可以由多个字段组成,使用内表可以指定非唯一键,允许存储任意数量的非唯一记录,并且如果需要允许存储重复记录。

内表的大小或其包含的行数不是固定的,内表的大小根据与内部表相关联的程序的要求而改变。为了避免系统运行缓慢,建议保持内表尽可能小,因为要处理大量的数据。

创建内表

使用DATA语句声明内表,用begin of标记内表开始的位置,begin of后面接内表的名字,最后使用occurs表示正在创建一个内部表,数值为0表示不包含任何数据,在后面的过程中填充数据。

    DATA:    BEGIN OF inner_test occurs 0.
复制代码

在一个新行上创建字段,声明字段名称和字段类型,like itab_name的意思是和表itab的name类型是一样的,最后使用end of标记内表结束的位置。

DATA:BEGIN OF inner_test occurs 0,
name LIKE itab_name,
address TYPE c,
END OF inner_test.

复制代码

还可以创建内表作为本地数据类型,使用TYPES语句创建。with unique key是设置字段是否为关键字。

TYPES inner_test LIKE HASHED TABLE OF itab WITH UNIQUE KEY id. 复制代码

完整的两种创建内表的代码如下。

REPORT ZTEST.
TYPES:BEGIN OF struct_test,
name (20) TYPE C,
tel TYPE N.
END OF struct_test.
TYPES itab_test LIKE HASHED TABLE OF struct_test WITH UNIQUE KEY name.复制代码

填充内表

在填充内表中主要包括插入和追加功能,主要掌握insert语句和append语句。

INSERT语句

INSERT语句是将单个行或者一组行插入到内表中,将row行插入到内表inner_test中,使用index语句,插入行之后的行的索引值会增加1,当index后面的值包含-1行时,则新行插入到内表的末尾,当插入成功时,sys-subrc的变量设置为0。

INSERT row INTO inner_test INDEX 2.复制代码

APEND语句

APPEND语句用于向现有内表添加单个行。 此语句从工作区复制单个行,并将其插入内部表中的最后一个现有行之后。 工作区可以是标题行或与内部表的行具有相同结构的任何其他字段字符串。 

APPEND row INTO inner_test.复制代码

复制内表

要复制内表中的行,首先通过select语句选择内表中的行,然后通过move语句将记录从内表中移动到新的内表对应名称的字段中。将内表itab1移动到itab2中去。

MOVE itab1 TO itab2.复制代码

读取内表

使用read table读取内表中的行。

READ TABLE itab1 FROM itab2.复制代码

我们可以通过使用WITH KEY子句在READ语句中指定搜索键,而不是表键。

READ TABLE <internal_table> WITH KEY = <internal_tab_field>.复制代码

删除内表

DELETE语句用于从内部表中删除一个或多个记录。 通过指定表键或条件或通过查找重复条目来删除内部表的记录。 如果内部表具有非唯一键并且包含重复条目,则将删除表中的第一个条目。

删除指定记录或者行。

DELETE TABLE itab FROM itab_test.复制代码

删除指定键。

DELETE TABLE <internal_table> WITH TABLE KEY <K1> = <F1>………… <Kn> = <Fn>.复制代码

小结

内表在处理大量数据时的功能就体现出来了,数据必须由数据库先和内表打交道,最后用户再和内表交互,内表的功能包括添加数据,删除数据,转移数据,读取数据。


转载于:https://juejin.im/post/5b3b2769e51d451923441a03

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值