【问题标题】:Execute a THEN clause where WHEN is false执行 WHEN 为假的 THEN 子句
【发布时间】: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总是评估。很奇怪。
  • HAN​​A 中是否有一种方法可以将函数的行为更改为“确定性”?
  • 显然不是
  • 是的,SAP HANA 2 支持函数的 DETERMINISTIC 属性。但正如答案中所写,这不是这种情况下意外行为背后的原因。

标签: sql sap hana hana-sql-script


【解决方案1】:

刚刚尝试使用 SAP HANA 2.40 重新创建它,我没有收到错误,但预期值为 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 2012-08-29
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多