内表 (★★★★)
#abap #abap-data
概览表
| 方面 |
要点 |
| 定义 |
存储多行相同结构数据的动态数据对象 |
| 内存 |
由 ABAP 运行时动态管理 |
| 关键要素 |
行类型、表类型、主键 |
表类型
| 类型 |
键唯一性 |
访问方式 |
适用场景 |
| STANDARD |
非唯一 |
索引 |
顺序访问、APPEND |
| SORTED |
唯一或非唯一 |
索引 |
部分范围访问、排序顺序 |
| HASHED |
仅唯一 |
键(无索引) |
单条记录按键查找 |
1 2 3 4 5
| 性能决策树: 你将如何访问数据? ├── 索引顺序访问 → STANDARD ├── 部分范围访问 → SORTED └── 单键查找 → HASHED
|
定义内表
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| " 使用字典表类型 DATA gt_connections TYPE bc400_t_connections.
" 内联定义 DATA gt_flights TYPE TABLE OF bc400_s_flight.
" 显式指定表类型和键 DATA gt_sorted TYPE SORTED TABLE OF bc400_s_flight WITH NON-UNIQUE KEY carrid connid.
" 工作区 DATA gs_flight TYPE bc400_s_flight. " 或者 DATA gs_flight LIKE LINE OF gt_flights.
|
定义默认值(简写形式)
- 表类型:STANDARD(默认)
- 键唯一性:非唯一(标准表的唯一选项)
- 主键:默认键(所有非数字字段)
默认键使用所有非数字字段,通常没有实际意义。务必定义显式键。
行操作
| 语句 |
用途 |
示例 |
APPEND wa TO itab |
添加到末尾(仅标准表) |
APPEND ls TO gt_tab. |
INSERT wa INTO TABLE itab |
插入(排序位置) |
INSERT ls INTO TABLE gt_tab. |
READ TABLE itab INTO wa |
读取单行 |
READ TABLE gt_tab INTO ls INDEX 1. |
MODIFY itab FROM wa |
覆盖行 |
MODIFY gt_tab FROM ls. |
DELETE itab |
删除行 |
DELETE gt_tab WHERE carrid = 'LH'. |
COLLECT wa INTO itab |
按键汇总 |
COLLECT ls INTO gt_tab. |
集合操作
| 语句 |
用途 |
LOOP AT itab INTO wa |
逐行处理 |
DELETE itab WHERE cond |
删除匹配的行 |
INSERT LINES OF itab1 INTO itab2 |
在表之间复制行 |
APPEND LINES OF itab1 TO itab2 |
在表之间追加行 |
按索引 vs 按键访问
1 2 3 4 5 6 7
| " 按索引(仅标准表和排序表) READ TABLE gt_tab INTO ls INDEX 1. LOOP AT gt_tab INTO ls FROM 1 TO 5.
" 按键 READ TABLE gt_tab INTO ls WITH TABLE KEY carrid = 'LH' connid = '0400'. LOOP AT gt_tab INTO ls WHERE carrid = 'LH'.
|
- 排序表以键字段作为首字段 → 最适合 WHERE 访问
- 哈希表 → 最适合大数据集中单条记录按键访问
- 标准表 → 最适合主要以 APPEND 方式顺序处理的场景
排序和清除
1 2 3 4 5 6 7
| SORT gt_tab BY field ASCENDING. " 或 DESCENDING SORT gt_tab AS TEXT. " 按语言相关的排序规则 SORT gt_tab STABLE. " 保持相等键的原始顺序
REFRESH gt_tab. " 清除内容,保留内存 CLEAR gt_tab. " 与 REFRESH 相同(无表头行时) FREE gt_tab. " 清除内容并释放内存
|
表头行(已过时)
表头行已经过时。在 ABAP Objects 或嵌套数据对象中不允许使用。务必使用显式工作区。
考试/测试模式
| 场景/关键词 |
答案 |
| “三种表类型?” |
STANDARD、SORTED、HASHED |
| “APPEND 适用于所有表?” |
否 — 仅标准表 |
| “默认键?” |
所有非数字字段 |
| “推荐使用表头行?” |
否 — 已过时 |
| “循环中的索引字段?” |
sy-tabix |
| “从表定义工作区?” |
LIKE LINE OF itab |
相关笔记