2013-06-19 76 views
1

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

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

任何人都可以请帮我找出什么是错的。 任何帮助深表谢意。

回答

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, 
    

迪特

+0

这并不真正的工作!非常感谢您的建议。 – MaterialGirl