我在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'不存在。
有人可以帮我找出问题所在。 非常感谢任何帮助。
答案 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函数“ *****”用无效的数字或参数类型调用。
祝你好运!