2013-06-19 108 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