関数名のオーバーロードの代替手段としてのTD_ANYTYPEパラメータの使用 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/rin1593638965306.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

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;
UDFの作成者は、この単一の関数を記述して、次のデータ型の引数を有効として受け入れるようにできます。
  • 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スカラー関数を参照してください。