如何对存储不同格式UUID字段的两张SAP EWM数据表执行关联查询
问题解答
在HANA数据库+ABAP 7.50的环境下完全可以实现直接关联查询,核心是使用ABAP Open SQL内置的UUID格式转换函数在关联条件中实时做格式转换。
方案1:直接在Open SQL中使用转换函数关联
ABAP 7.40 SP05及以上版本已支持UUID_FROM_C22、UUID_TO_C22两个内置函数,可直接在Open SQL中调用,分别实现CHAR22格式UUID转RAW16格式、RAW16格式转CHAR22格式的逻辑,和CL_SYSTEM_UUID类的标准转换结果完全一致。
你需求的查询可以修改为如下写法,直接执行即可返回正确结果:
SELECT FROM /scwm/pvpakc AS pack_spec INNER JOIN /sapapo/matkey AS material ON UUID_FROM_C22( material~matid ) = pack_spec~matid FIELDS pack_spec~pvguid as ps_guid, material~matnr as material_num INTO TABLE @DATA(lt_pack_spec_material).
性能优化建议
- 如果查询时
/SCWM/PVPAKC表的筛选条件多、返回结果集小,可以把转换逻辑反过来,将RAW16格式转CHAR22后匹配,这样可以用到/SAPAPO/MATKEY表MATID字段的标准索引,性能更高:SELECT FROM /scwm/pvpakc AS pack_spec INNER JOIN /sapapo/matkey AS material ON material~matid = UUID_TO_C22( pack_spec~matid ) FIELDS pack_spec~pvguid as ps_guid, material~matnr as material_num INTO TABLE @DATA(lt_pack_spec_material). - 该转换逻辑完全下压到HANA层执行,无需ABAP层额外处理,性能远优于分两次查询再关联的方案。
方案2:封装为CDS视图复用
如果该关联逻辑需要多处使用,可以封装为CDS视图,在CDS中同样可以使用上述UUID转换函数做关联,后续业务代码直接查询CDS视图即可,示例CDS定义如下:
@AbapCatalog.sqlViewName: 'ZCDS_PACK_MAT' @EndUserText.label: '包装规格与物料关联视图' define view Zcds_Pack_Material as select from /scwm/pvpakc as pack_spec inner join /sapapo/matkey as material on material.matid = uuid_to_c22( pack_spec.matid ) { key pack_spec.pvguid as ps_guid, material.matnr as material_num }
内容的提问来源于stack exchange,提问作者Marshal
相关产品推荐
相关产品推荐

