在合并查询中使用变量会引发不支持的错误

2020-09-14 20:15发布

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

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


HI

我正在HANA程序中编写合并查询。 在完整堆栈的Web IDE中。 正常的合并命令有效,但是当我尝试在其中使用变量时,它会抛出"此处不支持的表达式"。

任何人都知道如何解决它。 如果此功能正在开发中,那么它将在何时发布。 或这是一个错误。 或带有合并的变量通常不起作用。 或HDI xs高级问题。

请帮助

感谢和问候

Rakshit Chopra

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

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


HI

我正在HANA程序中编写合并查询。 在完整堆栈的Web IDE中。 正常的合并命令有效,但是当我尝试在其中使用变量时,它会抛出"此处不支持的表达式"。

任何人都知道如何解决它。 如果此功能正在开发中,那么它将在何时发布。 或这是一个错误。 或带有合并的变量通常不起作用。 或HDI xs高级问题。

请帮助

感谢和问候

Rakshit Chopra

付费偷看设置
发送
5条回答
野沐沐
1楼 · 2020-09-14 20:50.采纳回答

我投入了自己的时间和精力来构建可复制的示例,发现这确实是对MERGE INTO命令的当前(HANA 2.00.33)实现的限制。

当人们尝试使用占位符执行MERGE命令时,这一点显而易见:

 SAP DBTech JDBC:[467]:无法使用参数变量:STARTTIME:第8行第41行(在pos 229处)

在SQLScript嵌入式SQL中,针对同一问题的错误消息看起来有些不同:

 SAP DBTech JDBC:[7]:不支持的功能:" DEVDUDE"。" merge_t1_from_t2":第8列第9行(位置167):
 此处不支持的表达式:__TYPED_LONGDATE __(:1):第12行第34行(在pos 542)
 

事实上,这就是让我思考解决方法的原因,并显示了在提出问题或提出支持事件时提供所有必要信息(例如实际错误消息和可重现的示例)非常重要。

解决方法是使用 bind_as_value() SQL脚本中的命令修饰符:

创建或替换过程" merge_t1_from_t2"(
     在startTime时间戳中,
     IN endTime时间戳
 )
    语言SQLSCRIPT
    SQL安全调用者
 开始
         合并到t1
 使用方法
 ( 选择
 col1,
 col2,
 sum(col3)作为sum_col3
 从t2开始
 其中" created_time"> =:startTime和" created_time" <:endTime
 按col1分组,col2)t2_b
 开启t1.col1 = t2_b.col1
 和t1。" created_time" = bind_as_value(:startTime)
      
         匹配后更新集
             t1.col1 = t2_b.col1,
             t1.col2 = t2_b.col2,
             t1.sum_col3 = t2_b.sum_col3
        
         未匹配时插入
                  (col1,col2,sum_col3," created_time")
           VALUES(t2_b.col1,t2_b.col2,t2_b.sum_col3,bind_as_value(:startTime));
 END; 
亦是此间程序员
2楼-- · 2020-09-14 21:05

没有代码-没有帮助!

向我们显示您的代码以及什么不起作用,我们可能会提供帮助。

95年老男孩
3楼-- · 2020-09-14 20:56

在引用变量时,代码似乎缺少冒号(:)。

创建过程" xyz :: abc"(
 在startTime时间戳中,
 IN endTime时间戳
 )
    语言SQLSCRIPT
    SQL安全调用者
 开始
 合并为" xyz :: table1" t1
 使用方法
 ( 选择
 " column_1",
 " column_2",
 sum(" column_3")as" sum_column_3"
 来自" xyz :: table2"
 其中" created_time"> =:startTime
                           和" created_time" <:endTime
 按" column_1"," column_1"分组)t2
 开启t1。" column_1" = t2。" column_1"
                 和t1。" created_time" =:startTime

                 匹配后更新集
 t1。" column_1" = t2。" column_1",
 t1。" column_2" = t2。" column_2",
 t1。" sum_column_3" = t2。" sum_column_3"

                 未匹配时插入
 (" column_1",
 " column_2",
 " sum_column_3",
 " created_time"
 )值(
 t2。" column_1",
 t2。" column_2",
 t2。" sum_column_3",
 :开始时间
 );
 结束;
 

由于该问题缺少可复制的示例(该表没有DDL,没有测试数据)和重要信息(HANA的修订版本),因此该答案仅涵盖明显的错误。 此代码可能还会有更多问题。

SAP砖家
4楼-- · 2020-09-14 20:46

我无法编辑问题,因此在此处发布代码

创建过程" xyz :: abc"(
 在startTime时间戳中,
 IN endTime时间戳
 )
    语言SQLSCRIPT
    SQL安全调用者
 开始
 合并为" xyz :: table1" t1
 使用方法
 ( 选择
 " column_1",
 " colume_2",
 sum(" colume_3")为" sum_column_3"
 来自" xyz :: table2"
 其中" created_time"> = startTime," created_time"  

在这里,如果我用恒定值或current_timestamp和add_seconds(current_timestamp,3600)替换startTime和endTime变量,则可以正常工作。

huskylover
5楼-- · 2020-09-14 20:56

如果您想让任何人重现此问题,请提供DDL代码以正确设置表。

可悲的是,您开发过程中的描述,故事,故事和经验报告不是在HANA上执行的。

一周热门 更多>