(本博客将提供在CDS视图中连接表时面临的问题和解决方案)
ABAP CDS视图提供了连接链接列上的表的功能。例如,表employee\u details和company\u details可以基于两个表中存在的company\u ID进行联接。但是在执行连接时会遇到以下问题:
1)两列的数据类型都不同:
您想到的第一个解决方案是将这些列中的一列转换为另一列的数据类型。
是的,此解决方案是正确的,但在下面提到的第二种情况下不起作用。
2)两列的数据类型和类型都不同其中一个是原始类型
让我们用一个例子来学习这个问题。
我们将使用两个表,ztemployee和zlogdata。
这两个表都有一个可以执行连接的链接列。ztemployee中该列的名称是DB\u KEY,zlogdata中该列的名称是OBJECTID。DB_KEY的数据类型是RAW 16,OBJECTID的数据类型是CHAR90。
首先在表ztemployee上创建一个CDS视图:
现在创建一个CDS视图(Z_I_JOINVIEW)来连接ZBASEVIEW,其中包含来自ztemployee和zlogdata的字段
Z_I_JOINVIEW不会被激活并抛出错误,悠哉返利机器人,因为两个链接列的数据类型都是不同的
现在试着铸造列DB\U键
,如下图所示,CDS视图中不允许强制转换原始类型
AMDP中实现的表函数是解决此问题的方法。
步骤1:创建由ABAP托管数据库过程实现的表函数。
AMDP中实现的方法允许连接具有不同数据类型的两个链接字段。
表函数遵循相同的步骤为相应的基本、复合或消费私有视图定义的约定。因此,它应该用@VDM.private公司:true
用关键字"with parameters"定义的客户机参数是ABAP类方法的导入参数。
关键字"returns"下定义的字段由表顶部的CDS视图函数使用
步骤2:实现AMDP:创建AMDP并实现连接两个表
注意:需要在这个类的声明中添加接口'if\u amdp\u marker\u hdp'来获得amdp的功能。在关键字"USING"后面提到所有表的名称(select语句中需要),并使用关键字"return"将所选字段返回到table函数中。
在方法z\u Join\u table中对fileds DB\u KEY和OBJECTID上的ztemployee和zlogdata表执行Join。在这里,联接不会抛出错误,云服务器服务器,不像在CDS视图中,不允许对不同数据类型的字段进行联接。
第3步:在CDS视图中使用表函数
此处$会话.客户端传递给表函数zp\u join\u table\u tf的参数P\u SAPClient,微淘客,并获取所需字段。
执行CDS view zi\u join\u table(注意:它是左外联接的结果;它可以根据需要进行更改)
因此,每当需要通过CDS视图联接链接列上的两个表并且这些列具有不同的数据类型时,大数据时代是什么意思,就转换其中一个列。如果这些列中有一个具有原始数据类型,则将它们连接到AMDP实现中实现的方法中,并将所需字段返回给表函数。在CDS视图中进一步使用私有表函数。
,国家大数据