结构与表类型 (★★★★)
结构与表类型 (★★★★)
#abap #abap-dictionary #abap-data-types
概览表
| Type (类型) | Dimension (维度) | Description (描述) |
|---|---|---|
| Flat Structure (扁平结构) | 一维 | 组件均为数据元素 |
| Nested Structure (嵌套结构) | 一维 | 包含子结构作为组件 |
| Deep Structure (深层结构) | 混合 | 至少包含一个内表组件 |
| Table Type (表类型) | 二维 | 描述内表结构 |
Structure(结构)
结构由**组件(Components)**组成,组件可以是:
1 | Structure |
📌扁平化规则
即使 Include 了数据库表或视图(二维对象),生成的数据对象仍是一维的。
扁平结构 (Flat Structure)
最简单的结构形式——组件全部是数据元素:
1 | ZPERSON |
- 地址方式:
wa_person-firstname
嵌套结构 (Nested Structure)
包含子结构作为组件:
1 | ZPERSON |
- 地址方式:
wa_person-name-firstname
Include 结构
使用 .INCLUDE 关键字将一个结构的字段直接展开到父结构中:
1 | ZPERSON |
💡Include vs 嵌套的区别
- Include:
wa_person-street(扁平访问,无前缀) - 嵌套:
wa_person-name-firstname(层级访问) - Include 实际上把子结构的字段拷贝到父结构中
深层结构 (Deep Structure)
包含至少一个内表组件的结构:
1 | ZPERSON (Deep Structure) |
- 访问内表:
LOOP AT wa_person-phone INTO wa_phone. - 可以多层嵌套:内表的行类型本身也可以是深层结构
⚠️数据库表限制
数据库表只能包含扁平结构,不能有深层结构中的内表组件。
Table Type(表类型)
表类型描述**内表(Internal Table)**的结构,在 ABAP 程序中创建二维数组。
定义要素
| Element (要素) | Options (选项) |
|---|---|
| Line Type (行类型) | 数据元素、结构、DB 表、视图、其他表类型 |
| Access Type (访问方式) | Standard / Sorted / Hashed |
| Key Type (键类型) | Unique / Non-unique |
| Key Definition (键定义) | Standard Key / Key Components |
访问方式对比
| Access Type | 特点 | 适用场景 |
|---|---|---|
| Standard Table | 线性搜索,无序 | 小数据量,不需排序 |
| Sorted Table | 按 key 排序,二分搜索 | 需要排序访问 |
| Hashed Table | 哈希索引 | 大数据量按键查找 |
创建示例
1 | SE11 → Data Type → Create → Table Type |
在 ABAP 中使用:
1 | DATA it_flight TYPE zit_sflight##. |
考试/测试模式
| Scenario/Keyword (场景/关键词) | Answer (答案) |
|---|---|
| “深层结构的定义条件?” | 包含至少一个内表组件 |
| “数据库表能用深层结构吗?” | 不能,只能用扁平结构 |
| “Include 和嵌套的区别?” | Include 扁平展开,嵌套增加层级 |
| “Include 链中的数据库表?” | 只能有一个(就是表本身) |