18.[SAP ABAP] 内表(Internal Table)
文章目录
- [18.[SAP ABAP] 内表(Internal Table)](#18.[SAP ABAP] 内表(Internal Table))
一、概述
内表 是ABAP编程语言中最核心、最强大的数据结构之一。它相当于其他编程语言中的"数组"、"列表"或"集合",但功能更为丰富。
内表是存在于ABAP程序运行期间(内存中)的一个临时表,用于处理和存储数据。它与数据库结构对应,是ABAP中进行数据操作的主要工具。
二、基本概念
- 内表由行组成,每行具有相同的结构(即行类型)。
- 内表只存于内存中,程序结束后自动释放。
- 内表的行可以是带表头(Header Line)或不带表头(推荐使用不带表头的方式)。
- 内表必须先定义,然后才能使用。
三、内表的类型
1.标准表
- **特点:**拥有一个逻辑索引。系统会自动为每一行维护一个从1开始的索引号。这是最常用,最通用的内表类型。
- **访问方式:**既可以通过索引快速访问,也可以通过键访问,但通过键访问时,系统会执行线程搜索,对于大数量可能较慢。
- **声明关键字:**STANDARD TABLE
ABAP
DATA:gt_material TYPE STANDARD TABLE OF mara. "标准表,存储物料主数据
gs_material LIKE LINE OF gt_material.
2.排序表
- **特点:**拥有一个逻辑索引,并且表中的行始终按照其主键自动升序排序。插入数据时会自动找到正确位置插入,以维持排序。
- **访问方式:**既可以通过索引访问,也可以通过键访问。由于是排序的,通过键访问时使用二分查找算法,速度非常块。
- **声明关键字:**SORTED TABLE。
ABAP
DATA: gt_customer TYPE SORTED TABLE OF kna1
WITH UNIQUE KEY kunnr, " 主键为客户编号,且唯一
gs_customer LIKE LINE OF gt_customer.
3.哈希表
- **特点:**没有逻辑索引。访问完全依赖于其主键。主键必须是唯一的。
- **访问方式:**只能通过键访问。其内部使用哈希算数管理,因此通过键访问的速度是恒定,极快,与数据量大小无关。
- **声明关键字:**HASHED TABLE。
ABAP
DATA:gt_currency TYPE HASHED TABLE OF t002
WITH UNIQUE KEY waers,"主键为货币代码,且唯一
gs_currency LIKE LINE OF gt_currency.
四、总结
| 序号 | 特性 | 标准表 | 排序表 | 哈希表 |
|---|---|---|---|---|
| 1 | 索引 |
有,逻辑索引 | 有,逻辑索引 | 无 |
| 2 | 排序 |
按插入顺序 | 始终按主键排序 | 无特定顺序 |
| 3 | 主键 |
可选,可非唯一 | 必须,可唯一/非唯一 | 必须,且唯一 |
| 4 | 键访问 |
线性搜索 | 二分查找(快) | 哈希算法(极快) |
| 5 | 使用场景 |
最通用,需索引访问,数据量不大 | 需要按固定键频繁读取且保持顺序 | 仅通过唯一键进行极频繁的读取,数据量大 |
选择建议 : 如果不确定,优先使用标准表 。当需要频繁通过一个键查找且数据量较大时,考虑排序表 。当需要通过唯一键进行海量数据的极速查找时,使用哈希表。