17.00 - 17.05 - ユーザー定義関数とラージ オブジェクト - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

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

ラージ オブジェクト パラメータまたはラージ オブジェクト戻り値のあるユーザー定義関数の使用上の特性は、他のすべてのUDFの使用上の特性と同じです。一般的に、引数としてLOB値を受け入れるUDFは、そうでない場合にUDFが許可されるすべての文脈で指定できます。さらに、LOB値を返すUDFは、そのタイプの値が適切であり、その他の場合にUDFが許可されるすべての文脈で使用できます。

他の関数および演算子と同様に、UDFの引数または戻り値には自動データ型変換を適用できます。ラージ オブジェクトをUDFパラメータとして使用する場合は、自動データ型変換がパフォーマンスに与える影響に注意する必要があります。たとえば、仮パラメータがBLOBタイプの関数には、VARBYTE列を実パラメータとして渡すことができます。システムはVARBYTE値を一時BLOBに変換してから、それをUDFに渡します。一時BLOBもディスクに保存されるので、この変換によって大きなパフォーマンス コストが生じます。

これを防止するために、VARBYTE TD_ANYTYPE引数を明示的に受け入れるようにオーバーロードされた関数の作成を検討してください。オーバーロード関数を作成して、行レベル セキュリティ制約を強制することはできないことに注意してください。

不適切な変換の可能性となる別の原因は、切捨てです。宣言された長さは、データ型の一部です。UDFの仮パラメータがBLOB(100000) AS LOCATORとして宣言されていて、実パラメータが、ロケータ指定のないBLOBとしてデータ型が宣言されている列である場合を考えます。この場合、ソースのデータ型の最大長はデフォルトの2,097,088,000バイトとなります。ソースのデータ型がターゲットのデータ型よりも長い場合には、切捨てが生じることがあります。このために、データ コピーと一時BLOBの作成を行なう自動変換操作を生成する必要があります。したがって、可能なときには、長さの指定を省略してUDFが最大長のオブジェクトを受け入れるように定義してください。

このルールは、データ型宣言は必要なだけの長さにするという、他のすべてのデータ型に関する方針に反しています。Teradata Vantage™- SQL外部ルーチン プログラミング、B035-1147を参照してください。