互換データ型 - Teradata Database - Teradata Vantage NewSQL Engine

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

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/uhh1512082756414.ditamap
dita:ditavalPath
ja-JP/uhh1512082756414.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

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型を使用する関数の定義を参照してください。
  • 関数名のオーバーロードを使用する。これにより、パラメータのデータ型が異なる複数の関数を同じ名前で定義できます。詳細は、関数名のオーバーロードを参照してください。