17.10 - null処理の推奨事項 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1184-171K-JPN
Language
日本語 (日本)
UDTのnullに関して次のいずれかをサポートする予定の場合、そのUDT型の列すべてにNOT NULL属性を指定する必要があります。
  • null UDT属性をサポートする。
  • nullを返せるMAP順序付けルーチンを記述する。

おそらく、この推奨事項の理由は分かりにくいかもしれません。扱わなければならない問題は次のとおりです。すなわち、もし列にNULLが許可され、かつMAP順序付けルーチンまたはシステム生成オブザーバー ルーチンのどちらかがNULLを返せるとしたら、セマンティックスはNOT CASESPECIFIC属性を付けて指定されている列に対してクエリーを行なう状況にいくらか似たものとなり、静的データに対する同一のクエリーに対して、システムがリクエスト側に返す結果がリクエストによって異なる可能性があるということです。

UDTの順序付けルーチンは、列値の比較方法、そのユーザー定義データ型を持つ値のソート順を決定します。

この推奨事項に従わないと、列のnullと、MAPまたはオブザーバー ルーチンがNULLを返すnull属性の含まれたSTRUCTURED型とが、同等に扱われる可能性があります。これは、システムが結果セットに列nullを返す場合もあれば、null属性を含む非null STRUCTURED型UDTを結果セットに返す場合もあることを意味します。

nullを返すことのできるマッピングおよびオブザーバー ルーチンを伴うmyStructUdtWithNullAttributesというSTRUCTURED型UDTを作成し、(名前からも推測のつくとおり)このデータ型がnull属性をサポートする場合、以下の例に沿ってテーブルを定義し、すべてのUDT列にNOT NULL属性を指定すると、これに対するクエリーによって返されるnullに関して不定の動作が生じることはありません。

CREATE TABLE udtTable (
  id         INTEGER,
  udtColumn  myStructUdtWithNullAttributes NOT NULL);

ハッシュ インデックス定義に使用される場合のあるSTRUCTURED型UDTを作成する場合、その順序付け関数がnullを戻さないことを確認する必要があります。そうでない場合、データベースはリクエスト側にエラーを返します。