SAP HANA过程:内部错误:没有可用的SCORE函数实现

2020-08-14 00:00发布

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

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


嗨,

我搜索了Google和SAP KB,但是找不到与此错误相关的任何内容。

我们正在使用ABAP报告调用HANA过程,但由于以下错误而崩溃:
"没有可用的SCORE函数实现"

我尝试在SQL Console中运行SQL,但没有错误。 (没有某些WHERE条件)
它在HANA 1.0上也没有错误运行,现在我们在HANA 2.0上。

有人遇到类似问题或确切知道分数"实施"在哪里吗?

该过程的"分数"部分如下所示:

立即将'INSERT INTES INTO" ABC :: TABLE2"
                              (    "得分",
                                 "X",
                                 "X",
                                 "X",
                                 "X",
                                 "X",
                                 "X",
                                 "X",
                                 "X",
                                 "X")
          选择TO_DECIMAL(SCORE(),3,2)作为"分数",
                             "X",
                             "X",
                             "X",
                             "X",
                             "X",
                             "X",
                             "X",
                             "X",
                             "X"
          来自" ABC :: TABLE1"
          在哪里包含(" ZXXX",CAST('''||:LV_FXXXXT ||'''作为文本),FUZZY('||:LV_FUZZY_SCORE ||',''textSearch = compare,Threshold ='||:LV_TOKEN_TREFFER |  |'''))
            AND SCORE()>'''||  :LV_FUZZY_SCORE ||  '''
            AND OXXXXXR ='''||  :LV_OXXXXXR ||  '''
            AND XXXXR ='''||  :LV_XXXXR ||  '''
            AND ZXXX ='''||  :LV_PSCD_ZXXX ||  '''
            AND FXXXXT ='''||  :LV_FXXXXT ||  ''''; 

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

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


嗨,

我搜索了Google和SAP KB,但是找不到与此错误相关的任何内容。

我们正在使用ABAP报告调用HANA过程,但由于以下错误而崩溃:
"没有可用的SCORE函数实现"

我尝试在SQL Console中运行SQL,但没有错误。 (没有某些WHERE条件)
它在HANA 1.0上也没有错误运行,现在我们在HANA 2.0上。

有人遇到类似问题或确切知道分数"实施"在哪里吗?

该过程的"分数"部分如下所示:

立即将'INSERT INTES INTO" ABC :: TABLE2"
                              (    "得分",
                                 "X",
                                 "X",
                                 "X",
                                 "X",
                                 "X",
                                 "X",
                                 "X",
                                 "X",
                                 "X")
          选择TO_DECIMAL(SCORE(),3,2)作为"分数",
                             "X",
                             "X",
                             "X",
                             "X",
                             "X",
                             "X",
                             "X",
                             "X",
                             "X"
          来自" ABC :: TABLE1"
          在哪里包含(" ZXXX",CAST('''||:LV_FXXXXT ||'''作为文本),FUZZY('||:LV_FUZZY_SCORE ||',''textSearch = compare,Threshold ='||:LV_TOKEN_TREFFER |  |'''))
            AND SCORE()>'''||  :LV_FUZZY_SCORE ||  '''
            AND OXXXXXR ='''||  :LV_OXXXXXR ||  '''
            AND XXXXR ='''||  :LV_XXXXR ||  '''
            AND ZXXX ='''||  :LV_PSCD_ZXXX ||  '''
            AND FXXXXT ='''||  :LV_FXXXXT ||  ''''; 
付费偷看设置
发送
6条回答
clasier
1楼-- · 2020-08-14 00:47

" SCORE"周围有单引号吗?

haha101010
2楼-- · 2020-08-14 01:03

您好Abhishek,
感谢您的评论。 我也这么认为,并且已经尝试删除这种情况,但是不幸的是,这并没有解决错误。
这是导致错误的部分:

 SELECT TO_DECIMAL(SCORE(),3,2)AS" SCORE" 
95年老男孩
3楼-- · 2020-08-14 00:54

错误消息似乎表明HANA尝试对它执行的数据类型使用SCORE()函数 不提供该功能。

这使我想到也许CAST(... AS TEXT)部分正在将其推开。

HANA 1和HANA 2之间,SAP进行了大量工作来清理HANA中不同"引擎"之间数据类型实现的混乱(例如,行存储CHAR!=列存储CHAR等)。 因此,也许错误是它的副作用。

尝试看看如果从CONTAINS子句中删除CAST部分会发生什么。

独立观察员
4楼-- · 2020-08-14 01:00

值得尝试运行 此没有分数功能的SQL,您可能已经看过有关该功能用法的帮助文档,并相应地进行了更改

https://help.sap.com/viewer/4fe29514fd584807ac9f2a04f6754767/2.0.02/en-US/20e6f8e97519101489a0cd3c29991e72.html#:~:text = SCORE%20返回%20a%20real%20的值,column%20that%20引起的%20the%20match

谢谢

Abhishek Shanbhogue

愤怒的猪头君
5楼-- · 2020-08-14 00:48

这个错误消息引起了我的兴趣,我对此情况有所了解。

TL; DR:

对于HANA 2,当目标表是COLUMN存储表时,无法执行INSERT INTO(SELECT)的SQL执行。

要使其正常工作,您可以将SELECT的结果分配给 表变量,然后将该表变量用于INSERT INTO(SELECT ...)。
或者,您可以将目标表转换为ROW STORE表。

如果要在代码中保留动态SQL并且无法将目标表更改为行存储,则可能需要考虑 使用中间行存储表。

下面是要使用的代码:

创建列表tab1
 (aaa nvarchar(20)
 ,bbb bigint);

 创建列表tab2
 (aaa nvarchar(20)
 ,bbb bigint
 ,score_2十进制(5,4));

 插入tab1
 选择
 左(用户名20)
 ,to_bigint(rand()* 10000)
 来自用户;

 从tab1中选择*;

/*
 AAA BBB
 SYS 2,133
 系统4,763
 _SYS_STATISTICS 2,401
 _SYS_TABLE_REPLICAS 3,166
 _SYS_EPM 3,586
 _SYS_REPO 9,333
 _SYS_SQL_ANALYZER 9,636
 _SYS_TASK 7,742
 _SYS_AFL 8,490
 _SYS_WORKLOAD_REPLAY 5,320
 _SYS_DATA_ANONYMIZAT 2,790
 _SYS_PLAN_STABILITY 1,653
 TEL_ADMIN 4,010
 */


 插入tab2(aaa,bbb,score_2)
 (
  选择
  aaa,bbb,to_decimal(score(),5、4)作为得分
  从
  tab1
  哪里
  包含(aaa,'REPO',FUZZY(0.23))
 )
/*
 当tab2是列存储时:
 SAP DBTech JDBC:[264]:无效的数据类型:内部错误:没有可用的SCORE函数实现
 */

 修改表的tab2行;  -更改为行存储表
 -现在插入有效

 开始
 res =选择
  aaa,bbb,to_decimal(score(),5,4)作为score_2
  从
  tab1
  哪里
  包含(aaa,'REPO',FUZZY(0.23));
 
  选择* from:res;
 
  插入tab2(aaa,bbb,score_2)
  选择* from:res;
 结束;

 -这也有效
葫芦娃快救爷爷
6楼-- · 2020-08-14 00:56

正如我在帖子中所写的,我可以在SQL控制台中运行此SQL,而不会出现错误。 我猜语法似乎很好。 我也已经查看了帮助文档。
但是,如果我尝试使用ABAP报告调用该过程,则会收到错误消息。 是的,如果我将" ... SELECT TO_DECIMAL(SCORE(),3,2)替换为" SCORE"...。"
替换为" ... SELECT'1'AS"作为" SCORE" ..." 它工作正常。

一周热门 更多>