【发布时间】:2019-09-02 11:50:19
【问题描述】:
在WHEN子句中使用UDF时,THEN子句的代码会出现错误,尽管函数返回false。
-- a simple function for example
CREATE FUNCTION "is_one"
(
IN checkNum INTEGER
)
RETURNS is_one INTEGER
LANGUAGE SQLSCRIPT
AS
BEGIN
IF
:checkNum = 1
THEN
is_one := 1;
ELSE
is_one := 0;
END IF;
END;
SELECT "is_one"(1) FROM DUMMY; -- returns 1
SELECT "is_one"(0) FROM DUMMY; -- returns 0
-- error... [304]: division by zero undefined: cannot be divided by zero at function /()
SELECT
CASE
WHEN "is_one"(0) = 1 THEN 1/0
ELSE 0
END AS x
FROM DUMMY;
-- an error does not occur if the function is not used
-- returns 0
SELECT
CASE
WHEN 0 = 1 THEN 1/0
ELSE 0
END AS x
FROM DUMMY;
我希望输出为 0,但实际我得到一个错误。
【问题讨论】:
-
似乎
1/0被总是评估。很奇怪。 -
HANA 中是否有一种方法可以将函数的行为更改为“确定性”?
-
显然不是
-
是的,SAP HANA 2 支持函数的
DETERMINISTIC属性。但正如答案中所写,这不是这种情况下意外行为背后的原因。
标签: sql sap hana hana-sql-script