HANA SQL中带有WHEN和过程的奇怪行为。

2020-09-03 16:31发布

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

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


以下与AMDP中的HANA SQLScript相关。

在SELECT子句中考虑此字段表达式:SELECT ...,

 CASE:INTAB.A_NUMBER
     当" 1234"
         THEN(1//(:INTAB.A_NUMBER-:INTAB.A_NUMBER))
     当" 5678"
         然后:INTAB.SOME_OTHER_NUMBER
     其他0
 END RESULT_FIELD,

当输入数据集包含" A_NUMBER" ='1234'的记录时,自然会以除以零的错误进行转储。 如果没有这样的记录,则不会转储。 很好,符合预期。

现在考虑以下字段表达式:

案例:INTAB.COMPANY
     当" 1234"
         然后(CONVERT_CURRENCY(
                   AMOUNT => amount_field
                   SOURCE_UNIT => loc_currency
                   TARGET_UNIT =>'GBP'
                   REFERENCE_DATE => ref_date
                   客户=>'010'
                   模式=>:lv_schema))
     当" 5678"
         然后:INTAB.SOME_OTHER_VALUE
     其他0
 END AS key_figure_1,

当我使用不带COMPANY ='1234'的数据集运行此程序时,出现有关未设置货币换算的错误。 即使WHEN表达式不正确,看起来CONVERT_CURRENCY过程仍在运行。

这至少可以说是出乎意料的。 有人有什么解释吗?

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

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


以下与AMDP中的HANA SQLScript相关。

在SELECT子句中考虑此字段表达式:SELECT ...,

 CASE:INTAB.A_NUMBER
     当" 1234"
         THEN(1//(:INTAB.A_NUMBER-:INTAB.A_NUMBER))
     当" 5678"
         然后:INTAB.SOME_OTHER_NUMBER
     其他0
 END RESULT_FIELD,

当输入数据集包含" A_NUMBER" ='1234'的记录时,自然会以除以零的错误进行转储。 如果没有这样的记录,则不会转储。 很好,符合预期。

现在考虑以下字段表达式:

案例:INTAB.COMPANY
     当" 1234"
         然后(CONVERT_CURRENCY(
                   AMOUNT => amount_field
                   SOURCE_UNIT => loc_currency
                   TARGET_UNIT =>'GBP'
                   REFERENCE_DATE => ref_date
                   客户=>'010'
                   模式=>:lv_schema))
     当" 5678"
         然后:INTAB.SOME_OTHER_VALUE
     其他0
 END AS key_figure_1,

当我使用不带COMPANY ='1234'的数据集运行此程序时,出现有关未设置货币换算的错误。 即使WHEN表达式不正确,看起来CONVERT_CURRENCY过程仍在运行。

这至少可以说是出乎意料的。 有人有什么解释吗?

付费偷看设置
发送
3条回答
SAP小菜
1楼-- · 2020-09-03 17:06

在放弃之前先尝试一下颠簸...

wang628962
2楼-- · 2020-09-03 16:56

您好,Matthew,

所选值将用 与结果无关的转换并不表示将不执行该转换(如您所显示的:-))。

执行计划是使用占位符作为未知数创建的,因此需要 包括所有案例分支。 如果HANA不执行不必要的分支会很好,但只要结果正确,那将不是一个错误。 实际上,首先对所有记录执行分支,然后再丢弃不必要的结果可能会更快。

我知道,这实际上并不能帮助回答如何重写此语句以避免错误。 ,但也许您可以基于INTAB数据选择转换参数,而不是选择转换过程调用。

jovirus
3楼-- · 2020-09-03 16:56

文档

  • ""要使用CONVERT_CURRENCY函数,请使用货币转换表TCURV,TCURX, SAP HANA数据库中必须有TCURN,TCURR和TCURF。对于其他SAP HANA数据库,请从SAP ERP系统中复制TCURV,TCURX,TCURN,TCURR和TCURF表。"

您有这些表格吗?

还有更正说明 2455436-S/4转换:不正确 具有UNIT_CONVERSION的CDS视图中的架构 使用CURRENCY_CONVERSION 可以解决S/4转换后的问题,默认的SCHEMA参数是S/4转换前的参数。

一周热门 更多>