UDTのタイプ
Vantageは、DISTINCT型UDTとSTRUCTURED型UDTをサポートします。
UDTタイプ | 説明 | 例 |
---|---|---|
DISTINCT型 | 事前定義された単一のデータ型に基づくUDT。INTEGERまたはVARCHARなど。 | euro という名前のDISTINCT型UDTがDECIMAL(8,2)データ型に基づいている場合、金額データを格納できます。 |
STRUCTURED | 属性と呼ばれる1つ以上のフィールドの集合。各属性は、事前定義データ型または他のUDT(入れ子がサポートされる)として定義されます。 | circleという名前のSTRUCTURED型UDTは、x軸、y軸、および半径属性から構成されます。 |
UDTは、LOB UDTまたは非LOB UDTとしてさらに分類できます。
呼び出し側 | AND … | UDTの分類 |
---|---|---|
DISTINCT型 | 元となる事前定義データ型がCLOBまたはBLOBである | LOB UDT. |
元となる事前定義データ型がLOBではない | 非LOB UDT。 | |
STRUCTURED | 少なくとも1つの属性のデータ型がCLOB、BLOB、またはLOB UDTである | LOB UDT. |
LOBまたはLOB UDTデータ型の属性はない | 非LOB UDT。 |
DISTINCT型UDTおよびSTRUCTURED型UDTに対しする操作を行なうユーザー定義メソッド(UDM)を作成できます。例えば、euroという名前のDISTINCT型UDTに対して、値をUSドルの金額に変換するメソッドを定義できます。同様に、circleという名前のSTRUCTURED型UDTに対して、半径属性を使用して円の面積を算出するメソッドを定義できます。
外部表現
すべてのUDTには、クライアント アプリケーションとサーバー間のインポートおよびエクスポート操作のためにVantageが使用する、対応する事前定義のSQLデータ型があります。特定のUDTにマップする事前定義データ型は、UDTに関連付けられた変換定義で指定されます。
呼び出し側 | THEN … |
---|---|
DISTINCT型 | Vantageは、UDTを元の事前定義データ型にマップする、インポートおよびエクスポート操作のためのデフォルトの変換定義を自動的に生成します。 例えば、euroという名前のDISTINCT型UDTがDECIMAL(8,2)データ型に基づいているとします。 Vantageが自動生成する変換定義により、クライアント アプリケーションはDECIMAL(8,2)の外部表現を使用してデータをeuro列にロードできます。さらに、クライアント アプリケーションはeuro列に対してクエリーを実行でき、DECIMAL(8,2)と同じ形式で値を受け取ることができます。 |
STRUCTURED | UDTの変換定義はCREATE TRANSFORM文を使用して作成される必要があります。 変換定義は、STRUCTURED型UDTの属性値をインポートおよびエクスポートするためのコンテナとして機能する事前定義SQLデータ型を指定します。 例えば、circleという名前のSTRUCTURED型UDTは、x軸、y軸、および半径属性から構成されます。ぞれぞれの属性のデータ型がFLOATであるとします。 変換定義はBYTE(24)事前定義タイプをcircle UDTにマップして、各FLOAT属性に8バイトを許可します。クライアント アプリケーションはBYTE(24)の外部表現を使用してデータをcircle列にロードできます。同様に、アプリケーションはcircle列でクエリーを実行して、BYTE(24)コンテナの属性値を受け取ることができます。 事前定義SQLデータ型から値を抽出して、対応するUDT属性を設定するインポート操作のロジックは、CREATE TRANSFORM文に指定されるUDFとしてインプリメントされます。同様に、UDT属性値を事前定義SQLデータ型にパックするエクスポート操作のロジックはUDFまたはUDMとしてインプリメントされます。 |
変換定義の詳細については、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>を参照してください。
UDTの外部表現の詳細については、UDTの外部表現を参照してください。
複数の変換グループのサポート
CREATE TRANSFORMまたはREPLACE TRANSFORM文を使用して、各UDTの複数の変換グループを作成できます。また、CREATE TRANSFORMを使用すると、既存の変換グループがすでにあるUDTに変換グループを追加できます。REPLACE TRANSFORMは、UDTに対してすべての既存の変換グループを削除し、UDTに対して新しい変換グループを作成します。また、DROP TRANSFORMを使用してUDTから変換グループを削除することができます。
特定のUDTに許容される変換グループの最大数は16です。
CREATE TRANSFORM文を使用する場合、from-sqlまたはto-sqlのいずれかのみを変換に指定できます。ただし、UDT列を持つテーブルを作成するため、UDTのデフォルトの変換グループは、変換グループにfrom-sqlとto-sqlの両方を関数に含んでいる必要があります。
CREATE PROFILE/MODIFY PROFILEまたはCREATE USER/MODIFY USER文でTRANSFORMオプションを使用して、ユーザーに対して特定のデータ型に使用される変換グループを指定できます。
次のマクロを使用して、UDT (またはCDT)の変換グループ、あるいはユーザー、プロファイル、または現在のセッションの変換グループ設定を検索することができます。
マクロ | 説明 |
---|---|
SYSUDTLIB.HelpCurrentUserTransforms | 現在のログオン ユーザーの変換グループ設定をリストする。 |
SYSUDTLIB.HelpCurrentSessionTransforms | 現在のセッションの変換グループの設定を表示する。 |
SYSUDTLIB.HelpUserTransforms(User) | 特定のユーザーの変換グループ設定をリストする。 |
SYSUDTLIB.HelpCurrentUDTTransform(UDT) | 指定されたUDTに対する現在のセッションの変換グループの設定を表示する。 |
SYSUDTLIB.HelpUDTTransform(User,UDT) | ユーザーのUDTの変換グループをリストする。 |
SYSUDTLIB.HelpProfileTransforms(Profile) | 特定のプロファイルの変換グループ設定をリストする。 |
SYSUDTLIB.HelpProfileTransform(Profile,UDT) |
プロファイルのUDTの変換グループをリストする。 |
これらのマクロの詳細については、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>を参照してください。
制限
- インデックス テーブル、結合インデックス、またはハッシュ インデックスを作成するときに、UDT列にプライマリ インデックスまたはセカンダリ インデックスを宣言することができます。ただし、次のUDTタイプはプライマリ インデックスまたはセカンダリ インデックスのどの形式もサポートしていません。
- LOB UDT
- VARIANT_TYPE UDT
- CLOBおよびBLOBデータ型に適用される制約はLOB UDTにも適用されます。
- 1つのテーブルで、最大32のCLOB、BLOB、またはLOB UDT列の組み合わせが可能です。
- キュー テーブルにはCLOB、BLOB、またはLOB UDT列を含めることはできません。
- 名前に非ASCII文字を使用した既存のUDTがある場合は、名前にLATIN文字を使用した新しいUDTの作成にASCIIセッション文字セットを使用することはできません。代わりに、UTF8またはUTF16セッション文字セットを使用する必要があります。
UDTを処理する関数
パラメータとして、およびC、C++、またはJavaで記述されたUDFのための戻り型としてUDTを指定できます。これには、スカラーと集約UDF、テーブル関数、およびテーブル演算子が含まれます。
UDTは、C、C++、またはJavaで記述されたストアド プロシージャおよび外部ストアド プロシージャのIN、INOUT、OUTパラメータとして指定できます。
FNC関数、Javaクラスおよびメソッドは、UDFまたは外部ストアド プロシージャでUDTパラメータへのアクセスやその値を設定できるように、またはUDTパラメータの情報を取得できるようにするために提供されています。これらの関数およびメソッドの詳細については、<Teradata Vantage™ - SQL外部ルーチン プログラミング、B035-1147>を参照してください。
- 関数または演算子が受け入れる事前定義タイプにUDTをキャストする暗黙的なキャスト定義が存在する。
- DisableUDTImplCastForSysFuncOp DBS Controlフィールドがゼロに設定されている。
SQL関数および演算子とともにUDTを使用する方法については、<Teradata Vantage™ - SQL関数、式、および述部、B035-1145> を参照してください。