Teradata Databaseでは、戻り値型に対してもパラメータ型と同じマッピング ルールを使用しています。
スカラーまたは集約関数のUDFを実装するJavaメソッドの場合は、戻り値に使用するデータ型は、CREATE FUNCTIONまたはREPLACE FUNCTION文のRETURNS句のSQLデータ型にマッピングされます。(UDFテーブルには戻り値はありません。UDFテーブルにより生成された結果行の列は、出力パラメータとして戻されます)。
スカラーUDFに対してCREATE FUNCTION文を使った次の例を見てください。
CREATE FUNCTION factorial (x INTEGER) RETURNS INTEGER LANGUAGE JAVA NO SQL PARAMETER STYLE JAVA RETURNS NULL ON NULL INPUT EXTERNAL NAME 'JarUDF:UDFExample.fact';
このRETURNS句では、戻り値のSQLデータ型はINTEGERと指定されています。UDFを実装するファクトメソッドのシグネチャは次のようになります。
public static int fact( int x ) { ... }
デフォルトのマッピング規則は単純なマッピングで、SQLデータ型がJavaプリミティブにマッピングされます。SQLデータ型に適切にマッピングできるJavaプリミティブが無い場合は、デフォルトのマッピング規則はオブジェクト マッピングになり、SQLデータ型がJavaクラスにマッピングされます。
DECIMAL値を戻すfactorial指定のUDFを紹介します。
CREATE FUNCTION factorial (x INTEGER) RETURNS DECIMAL(8,2) LANGUAGE JAVA NO SQL PARAMETER STYLE JAVA RETURNS NULL ON NULL INPUT EXTERNAL NAME 'JarUDF:UDFExample.fact';
DECIMAL型は的確にJavaプリミティブにマッピングできないため、DECIMAL型はjava.math.BigDecimalにマッピングされます。UDFを実装するファクトメソッドのシグネチャは次のようになります。
public static BigDecimal fact( int x ) { ... }
SQLデータ型がJavaデータ型にマッピングされる仕組みについては、SQLデータ型のマッピングを参照してください。