17.00 - 17.05 - 互換データ型 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1147-170K-JPN
Language
日本語 (日本)

DML文中でUDFが使用されている場合に、それに渡される引数の型は、必ずしも関数定義における対応するパラメータ宣言と厳密に一致している必要はありませんが、互換性のあるものでなければならず、互換データ型に適用される優先順位ルールに従っていなければなりません。

例えば、INTEGERパラメータを宣言する関数を定義した場合、BYTEINT引数を指定してその関数を呼び出して正常に実行されるということは可能です。BYTEINT型とINTEGER型には互換性があり、BYTEINTをINTEGERとして指定できるからです。

しかし、FLOAT引数を指定してその関数を呼び出した場合、FLOATはINTEGERと互換性があるものの、互換データ型に適用される優先順位ルールのため、正常に実行されません。FLOATをINTEGERとして指定すると、情報が失われてしまいます。

互換性のあるデータ型をグループごとにまとめると、次のようになります。データ型は優先順位の高い順に示されています。ここに示されているデータ型は、互換データ型としてそれより後に示されている他のデータ型よりも優先されます。

グループ 互換データ型の優先順位リスト
文字
  • CHAR
  • VARCHAR/CHAR VARYING/LONG VARCHAR
  • CLOB
グラフィック
  • CHARACTER CHARACTER SET GRAPHIC
  • VARCHAR CHARACTER SET GRAPHIC or LONG VARCHAR CHARACTER SET GRAPHIC
バイト
  • BYTE
  • VARBYTE
  • BLOB
数値
  • BYTEINT
  • SMALLINT
  • INTEGER
  • BIGINT
  • DECIMAL/NUMERIC
  • NUMBER
  • REAL/FLOAT/DOUBLE PRECISION

スラッシュ( / )で区切られているデータ型は互いに同義語であり、その優先順位は同じです。

正確な精度を保持することが重要でない場合に、すべての数値データ型を受け入れる関数を定義するには、関数パラメータをREAL、FLOAT、またはDOUBLE PRECISIONとして定義します。このようにすれば、すべての数値型は互換性があり、関数の呼び出し前にREALデータ型に変換されるので、関数はすべての数値データ型を受け入れることができます。

DATE、TIME、UDTなど、この優先順位テーブルに示されていないデータ型は、他のどのデータ型とも互換性がありません。

対応するパラメータ型と互換性のない引数を渡すには、関数の呼び出し時に明示的にその引数を適切なデータ型に変換する必要があります。

異なる互換性グループに属する引数をUDFが受け入れられるようにするには、次のいずれかを実行します。
  • TD_ANYTYPEパラメータを使用する。このパラメータでは、すべてのシステム定義のデータ型またはユーザー定義型(UDT)を受け入れることができます。詳細については、TD_ANYTYPE型を使用する関数の定義を参照してください。
  • 関数名のオーバーロードを使用する。これにより、パラメータのデータ型が異なる複数の関数を同じ名前で定義できます。詳細については、関数名のオーバーロードを参照してください。