[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条回答
My梦
2020-09-04 05:34

不幸的是,在我的情况下,这使代码的易管理性降低了,而不再易于管理。 如果有人好奇的话,这是我的情况的较长解释:

我定义的每个"核心视图"都返回有关特定类型对象(例如,文档,文档行,项目,度量单位,仓位等)的数据,并且这些结果在其结果列前加上一个单词以标识 对象的类型。 (用于项目的itemCode,itemName,itemGroupCode等;用于文档的docEntry,docNum,docDueDate等。)这样,避免了列名冲突,并且更复杂的视图可以通过 星号通配符,没有问题。

客户端代码仅需要知道视图将哪些类型的对象捆绑在一起,并调用相应的函数来提取每个对象。 例如。 如果我从将文档行和项目捆绑在一起的视图中进行选择,则我将调用makeDocumentLine(sqlResult)和makeItem(sqlResult)。 当我更改核心视图的列时,例如 返回项目数据的那个,我对处理该对象类型的客户端函数进行了相应的更改,例如 " makeItem"功能。

这样,将核心视图结合在一起的复杂视图仅充当"中间人",而无需了解它们所结合的核心视图的列。 (封装/抽象原理。)如果我必须手动列出所有联接的列,则更改为核心视图意味着必须遍历联接该视图的所有SQL视图,并在此进行相同的更改。 (突破了抽象和DRY原理,使代码非常重复且更易于出错。)

简而言之,我确实需要该星号通配符才能工作。 :-)

一周热门 更多>