ABAP 内表
ABAP 内表
📊 内部表概述
定义
内部表实际上是一个临时表,它包含正在执行的ABAP程序的记录。内部表仅在SAP程序的运行期间存在。
内部表的特点
graph TD
A[内部表] --> B[临时存储]
A --> C[运行时存在]
A --> D[行结构]
A --> E[灵活访问]
B --> B1[程序终止时丢弃]
C --> C1[不占用永久内存]
D --> D1[相同结构和键]
E --> E1[索引或键访问]
数据存储结构
内部表中的数据存储在行和列中:
- 每一行称为行(Row)
- 每一列称为字段(Field)
所有记录具有相同的结构和键,使用索引或键访问内部表的各个记录。
💾 内部表的用途
主要用途
计算结果存储
- 保存以后可在程序中使用的计算结果
- 临时存储中间计算数据
数据缓冲
- 保存记录和数据,以便快速访问
- 避免重复访问数据库表
临时缓冲区
- 可以根据需要修改数据
- 只在运行时占用内存,不在声明时占用
数据结构定义
- 可以使用任何数量的其他定义的结构来定义
- 非常多才多艺
使用建议
保持内部表尽可能小,以避免系统运行缓慢。
🔧 内部表的种类
1. 标准表 (STANDARD TABLE)
| 特性 | 说明 | 访问方式 | 性能 |
|---|---|---|---|
| 表类型 | STANDARD TABLE |
索引或关键字 | 中等 |
| 索引 | 系统为每一行生成逻辑索引 | - | - |
| 数据存储 | 可以附加在现有行后或插入指定位置 | - | - |
| 操作特点 | 插入、删除时,数据行位置不变,系统重新排列索引值 | - | - |
2. 排序表 (SORTED TABLE)
| 特性 | 说明 | 访问方式 | 性能 |
|---|---|---|---|
| 表类型 | SORTED TABLE |
索引或关键字 | 高(查找时) |
| 索引 | 具有逻辑索引 | - | - |
| 数据存储 | 总是按关键字升序排列 | - | - |
| 特点 | 维护表时会自动保持排序 | - | 插入较慢 |
3. 哈希表 (HASHED TABLE)
| 特性 | 说明 | 访问方式 | 性能 |
|---|---|---|---|
| 表类型 | HASHED TABLE |
仅关键字 | 极高(查找时) |
| 索引 | 无索引 | - | - |
| 数据管理 | 使用哈希算法管理数据 | - | - |
| 性能特点 | 寻址时间与表大小无关 | - | 插入/删除较慢 |
🔑 表关键字
关键字定义规则
结构体作为行
- 可以指定结构体中的某几个字段作为内表关键字
- 该字段不能是内表或引用类型,但可以是嵌套体
基本类型作为行
- 如果内表的整行都是由基本类型字段组成,可以把整行指定为关键字
默认关键字
- 如果不指定任何关键字,使用默认的标准关键字
- 扁平结构内表的默认关键字是非数字和非内表的组件字段
默认关键字示例
| 字段类型 | 示例 | 默认关键字 |
|---|---|---|
| 姓名(C类型) | C 类型 | 姓名 |
| 年龄(N类型) | N 类型 | 年龄 |
| 工资(F类型) | F 类型 | 姓名、年龄 |
| 单个基本类型 | I 类型 | 整行 |
💡 内部表的定义和使用
基本定义
1 | * 使用STANDARD TABLE(默认) |
操作示例
1. 数据插入
1 | * APPEND - 追加到末尾 |
2. 数据读取
1 | * 使用索引读取 |
3. 数据修改
1 | * 修改指定行 |
4. 数据删除
1 | * 删除指定行 |
📊 内部表类型对比
| 类型 | 访问方式 | 插入性能 | 查找性能 | 删除性能 | 适用场景 |
|---|---|---|---|---|---|
| 标准表 | 索引或键 | 快 | 慢(线性) | 中等 | 通用,需要索引访问 |
| 排序表 | 索引或键 | 慢(需要保持排序) | 快(二分查找) | 中等 | 需要有序数据,频繁查找 |
| 哈希表 | 仅键 | 慢 | 极快(O(1)) | 慢 | 仅按键查找,性能要求高 |
⚠️ 注意事项
1. 内存管理
- 保持内部表尽可能小
- 避免不必要的数据存储
- 及时清理不再需要的数据
2. 性能考虑
1 | * 高效的批量操作 |
3. 数据完整性
- 注意关键字唯一性
- 正确处理系统返回代码
- 避免数据不一致