ABAP中如何声明deep table?需支持哈希键且同键可对应多行数据
实现哈希键对应多行数据的Deep Table定义方案
标准ABAP哈希表要求唯一键,原生不支持单键对应多条数据,采用嵌套结构的Deep Table是合理方案:外层为哈希表,使用你需要的字段作为唯一哈希键,每个键对应的值为一个存储多行业务数据的内层内表,既保留哈希表O(1)的查询效率,也满足单键对应多行的需求。
定义步骤
1. 定义内层业务数据结构与表类型
先定义单行业务数据的结构,再定义对应的标准表类型作为内层存储载体:
" 自定义内层业务数据结构,按需调整字段 TYPES: BEGIN OF ty_business_line, order_id TYPE n LENGTH 10, amount TYPE p LENGTH 8 DECIMALS 2, create_time TYPE timestamp, END OF ty_business_line. " 内层表类型,存储同一哈希键下的所有业务行 TYPES ty_business_tab TYPE STANDARD TABLE OF ty_business_line WITH EMPTY KEY.
2. 定义外层哈希表(Deep Table)类型
外层哈希表的行包含哈希键和对应的内层表两个部分:
" 外层哈希表的行结构 TYPES: BEGIN OF ty_deep_hash_line, group_key TYPE string, " 替换为你实际使用的哈希键字段和类型 item_tab TYPE ty_business_tab, " 对应存储多行数据的内层表 END OF ty_deep_hash_line. " 最终Deep Table类型,指定唯一哈希键 TYPES ty_deep_hash_tab TYPE HASHED TABLE OF ty_deep_hash_line WITH UNIQUE KEY group_key.
基础使用示例
" 声明Deep Table实例 DATA(gt_deep_hash) = VALUE ty_deep_hash_tab( ). " 插入哈希键为'GROUP001'的2条业务数据 INSERT VALUE #( group_key = 'GROUP001' item_tab = VALUE #( ( order_id = '0000000001' amount = '100.50' ) ( order_id = '0000000002' amount = '299.00' ) ) ) INTO TABLE gt_deep_hash. " 读取哈希键为'GROUP001'的所有业务行 DATA(lt_group_items) = gt_deep_hash[ group_key = 'GROUP001' ]-item_tab.
内容的提问来源于stack exchange,提问作者András
相关产品推荐
相关产品推荐

