2

我在 Teradata 中调用 SQL 用户定义函数时遇到了一些麻烦。我创建了以下功能

*REPLACE FUNCTION "twm_source"."TD_FN_CALC" (
        "func" CHARACTER(1) CHARACTER SET LATIN,
        "a" INTEGER,
        "b" INTEGER)
    RETURNS INTEGER
    SPECIFIC "td_fn_calc"
    LANGUAGE SQL
    CONTAINS SQL
    DETERMINISTIC
    CALLED ON NULL INPUT
    SQL SECURITY DEFINER
    COLLATION INVOKER
    INLINE TYPE 1
    RETURN CASE
    WHEN func = 'A'
    THEN A + B
    WHEN func = 'S'
    THEN A - B
    WHEN func = 'M'
    THEN A * B
    ELSE A / B
END;*

但是当我对 Teradata 14.0 服务器执行以下查询时

select "twm_source"."TD_FN_CALC"('M',3,8);

它给出了错误

失败 [5589 : HY000] 函数“TD_FN_CALC”不存在。

谁能帮我找出问题所在。任何帮助都深表感谢。

4

2 回答 2

1

当解析器无法将文字与函数参数匹配时,将返回错误 5589:字符文字 ('M') 是 VARCHAR,而“func”被定义为 CHAR。

有两种可能的解决方案:

  • 调用函数时添加显式类型转换

    select "twm_source"."TD_FN_CALC"('M' (CHAR(1)),3,8);

  • 将定义从 CHAR 更改为 VARCHAR。适用于 CHAR 和 VARCHAR 输入:-)

    "func" VARCHAR(1) CHARACTER SET LATIN,
    

迪特

于 2013-06-27T12:04:16.480 回答
0

请将 SPECIFIC "td_fn_calc" 更改为 SPECIFIC "twm_source"."td_fn_calc"

然后调用这个函数

选择 "twm_source"."TD_FN_CALC"('M' (CHAR(1)),3,8);

如果你只是调用这个函数

选择“twm_source”。“TD_FN_CALC”('M',3,8);

你会得到错误:

-9881 用无效数量或类型的参数调用函数“*****”。

祝你好运!

于 2019-07-17T04:00:26.550 回答