[BUG]当没有重复的列时,CREATE VIEW语句失败,并显示"重复的列名称"

2020-09-04 05:07发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)在SAP HANA中,当视图定义...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


在SAP HANA中,当视图定义时,即使没有重复,CREATE VIEW语句似乎也会失败,并出现"重复的列名"错误。

  • 将两个表或视图连接在一起
  • 使用星号通配符选择其列
  • 在结果中添加一个额外的命名列

这是我能够创建的最小的例子,它再现了问题:

将视图v1创建为
     从哑元中选择0作为x1;
    
 创建视图v2为
     从哑元中选择0作为x2;

 创建视图v1and2为
     选择v1。*,v2。*,0作为x3
     从v1开始
     在v1.x1 = v2.x2上加入v2 

通过HANA Studio执行此代码后,最后 CREATE VIEW语句出现此错误:

 SAP DBTech JDBC:[272]:重复的列名称:X2
 

但是列名X2显然没有重复。

上面的最小示例是荒谬的(仅出于示例目的),但是我在我的移动仓库管理解决方案COBI.wms的HANA内部部署版本的生产代码中遇到了这个问题。 它严重依赖于视图来获取所需的确切数据。 从其他COBI.wms视图连接数据时,它使用星号通配符,因此不需要一遍又一遍列出所有列名。 该错误使这种做法无法实现。

HANA版本:

1.00.122.22.1543461992(fa/hana1sp12)

4条回答
黑丝骑士
2020-09-04 05:26

如果其他任何人遇到这样的问题:

到目前为止,我只是通过始终不将SELECT列表中的星号通配符与非通配符元素混合来解决该问题。

对于我要添加到SELECT列表中的任何非通配符列,我只是使用所需的列创建一个附加视图,然后使用通配符将其加入结果。

考虑以下示例,该示例触发了我描述的错误:

创建视图myOrders为
     选择" DocEntry"," DocNum"," CardCode"
     来自" ORDR"

 创建视图myOrderLines为
     选择" DocEntry"," LineNum"," ItemCode"
     来自" RDR1"

 创建视图myOrdersWithLines为
     按原样选择o。*,l。*," N"
     来自myOrders o
     在l。" DocEntry" = o。" DocEntry"上加入myOrderLines 

以下产生相同结果的替代方法将在不触发错误的情况下起作用:

创建视图myOrders为
     选择" DocEntry"," DocNum"," CardCode"
     来自" ORDR"

 创建视图myOrderLines为
     选择" DocEntry"," LineNum"," ItemCode"
     来自" RDR1"

 创建视图notSelected为
     按原样选择" N"

 创建视图myOrdersWithLines为
     选择o。*,l。*,n。*
     来自myOrders o
     在l。" DocEntry" = o。" DocEntry"上加入myOrderLines l
     加入notSelected n on 1 = 1 

确切的解决方案将取决于您的视图,但是基本思想是将选择/计算值的视图与仅使用星号通配符将其他视图连接在一起的视图严格分开。 只要您不混淆它们,该错误就不会触发。

一周热门 更多>