我在将代码从MS-SQL移植到HANA时遇到问题,因为HANA似乎没有合理掌握应该评估哪些代码。
在我的场景中,我有一个包含数据的字段 - 数据是单个字符鉴别符,可以是'M','E'或'I'(机器/员工/项目) - 然后是冒号,然后一个值。对于'M:'和'I:'前缀,这是一个字符串,对于'E:'前缀,这是一个整数。
我最初的问题是,如果我这样做:
CASE LEFT(LB."U_Resource", 1)
HANA评估案例的所有WHEN子句中的代码是否需要这些值来计算输出 - 更糟糕的是,这样做会停止查询执行并出现错误。有没有办法让HANA以短路的方式对此进行评估 - 或者在输入输出之前忽略错误?
我的'E:'子句包含以下代码:
WHEN 'E'
THEN 'Emp(' || (
SELECT "firstName" || ' ' || "lastName"
FROM OHEM
WHERE LENGTH(LTRIM(SUBSTRING(LB."U_Resource", 3, 50), '+-.0123456789')) = 0
AND "empID" = CAST(SUBSTRING(LB."U_Resource", 3, 50) AS INT)
) || ')'
我得到的错误是当“U_Resource”为“LABOUR1”时该值不是INT。这适用于HANA 112.03,其中HANA从左到右执行,我的LH表达式保护了RH表达式。在HANA 122.05上,HANA始终首先执行RH表达式。
任何帮助都会受到赞赏 - 我认为这些都是执行引擎中的错误。
对于上下文 - 这是一个SAP B1数据库,而U_Resource“字段是用户定义表中的UDF。
由于