TD_ANYTYPEパラメータを使用すると、パラメータの数が同じでデータ型が異なるルーチンをサポートするために必要になるオーバーロード関数の数を減らせます。TD_ANYTYPEパラメータは、すべてのシステム定義のデータ型またはユーザー定義型(UDT)を受け入れることができるため、複数のデータ型に対応できる単一の関数を作成できます。
次の関数について考えてみましょう。この関数では、入力した文字列に含まれる最初の文字のASCII数値を返します。
CREATE FUNCTION ascii ( string_expr TD_ANYTYPE ) RETURNS TD_ANYTYPE LANGUAGE C NO SQL SPECIFIC ascii EXTERNAL NAME 'CS!ascii!ascii.c' PARAMETER STYLE SQL;
- CHARACTER
- VARCHAR
- CLOB
- CHARACTER、VARCHARまたはCLOB属性を持つUDT
- CHARACTERまたはVARCHARのエレメント タイプを持つARRAY
同様に、このUDFの作成者は、戻り値の型がBYTEINT、SMALLINTまたはINTEGERになる関数を記述することもできます。この関数は、入力文字列に関連付けられた文字セットを受け入れます。文字セットを明示的に指定していない場合は、デフォルトの文字セットが使用されます。
UDFの作成者は、TD_ANYTYPEを使用することで、任意に選択した文字セットのCHARACTERデータ型を表わすことも、必要な精度を持ったDECIMALデータ型やINTERVAL型を表わすこともできるようになります。この関数を定義すると、同様の基本関数(ascii_char_latin()、ascii_char_unicode()、ascii_varchar_latin()、ascii_varchar_unicode()、ascii_clob_latin()、ascii_clob_unicode()など)を実行するために、個別のルーチンを作成する必要がなくなります。
TD_ANYTYPEパラメータの詳細については、TD_ANYTYPE型を使用する関数の定義を参照してください。
この関数に相応するCコードの例については、TD_ANYTYPEパラメータを使用するCスカラー関数を参照してください。