在Teradata中调用UDF

时间:2013-06-19 16:38:21

标签: sql user-defined-functions invoke teradata

我在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'不存在。

有人可以帮我找出问题所在。 非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

当解析器无法将文字与函数参数匹配时,将返回错误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,
    

迪特

答案 1 :(得分: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函数“ *****”用无效的数字或参数类型调用。

祝你好运!