この例では、UDF呼び出しの引数のデータ型(INTEGER)と、対応するUDFパラメータのデータ型(BYTEINT)とは、同じではありません。これは、引数のデータ型のサイズがUDFパラメータのデータ型より大きいためです。2つのデータ型には互換性がありますが、INTEGER引数はBYTEINTパラメータ内に適合できないため、エラーが返されます。
CREATE FUNCTION test.MyUDF (a BYTEINT, b INT, c INT) RETURNS INT LANGUAGE SQL CONTAINS SQL DETERMINISTIC COLLATION INVOKER INLINE TYPE 1 RETURN a * b * c; CREATE TABLE t1 (a1 INT, b1 INT); SELECT test.MyUDF(t1.a1, t1.b1, 2) FROM t1;
次のエラーが返されます。
Failure 5589: Function "test.MyUDF" does not exist.
エラーを回避するには、次に示すように、呼び出し側で明示的に、t1.a1の値をBYTEINTにキャストする必要があります。
SELECT test.MyUDF(CAST(t1.a1 AS BYTEINT), t1.b1, 2) FROM t1;