CREATE TRANSFORM文はデータ変換グループをUDTに関連付けます。PERIODまたは地理空間データ型の場合は、データ変換グループを作成する必要はありません。
開発するUDTごとに1つのデータ変換グループがなければなりません。新しいDISTINCT型UDTをデフォルトで作成すると、データ変換グループはシステムによって定義されますが、すべての新規STRUCTURED型UDTに対してはデータ変換グループを明示的に定義する必要があります。
UDTには任意のテーブルの列タイプとして使用するために完全に定義されたデータ変換機能が必要です。この機能がないと、UDT型の列を含むテーブルを作成したり、そのようにテーブルを変更しようとしたときにアボートし、システムはリクエスト側にエラーを返します。
- 特定のデータベースUDTから、特定の事前定義されたクライアント データ型のサーバー形式へのマッピング。
このデータ変換を実行するルーチンを、fromsql変換ルーチンといいます。
- 事前定義されたクライアント データ型から、データベースの特定のUDTへのマッピング。
このデータ変換を実行するルーチンを、tosqlデータ変換ルーチンといいます。
このようなデータ変換マッピングの対をデータ変換グループと呼びます。1つのデータ変換グループが1組のtosql/fromsqlを定義します。1つのUDTが持つことのできるデータ変換グループは1つだけです。
有効なCREATE TRANSFORMリクエストを実行して、tosqlルーチンのみまたはfromsqlルーチンのみをUDTに関連付けることはできますが、UDTをテーブルの列データ型として指定する前に、UDTの完全なデータ変換機能を定義しておく必要があります。そうしないと、システムはALTER TABLEまたはCREATE TABLEリクエストをアボートし、リクエスト側にエラーを返します。
UDTの種類 | データ変換グループの機能 |
---|---|
1次元および多次元ARRAYおよびVARRAY | データベースによって自動生成されます。 VARCHAR列内の変換された出力の形式は、各配列要素値列(変換値列と呼ばれる)であり、以下に示されているようにカンマおよび括弧で区切られます。この配列にn個の構成要素が含まれている場合、形式は以下のようになります。 (<element_1>,<element_2>, … <element_n>) 次のルールが適用されます。
|
|
|
DISTINCT | データベースによって自動的に生成されます。 システム生成のデータ変換グループのセマンティクスが適切であれば、CREATE TRANSFORM文を使用して明示的なtosqlおよびfromsqlデータ変換機能を定義する必要はありません。 使用するアプリケーションに、それとは異なるより充実したデータ変換セマンティクスが必要な場合は、CREATE TRANSFORMを使用して、明示的なデータ変換グループ機能を指定することができます。 |
STRUCTURED | CREATE TRANSFORM文を使用して明示的に定義する必要があります。 |
データベースとの間でUDTがインポートまたはエクスポートされるときに、システムは必ずデータ変換機能を暗黙的に呼び出します。
システムは、外部ルーチンのUDTパラメータ セットにデータ変換グループを指定することは許可しません。その代わりに、プロセスが外部ルーチンを呼び出すと、システムはUDT値を直接外部ルーチン引数に渡すのではなく、UDTハンドルを渡します。外部ルーチンはこのUDTハンドルを使用し、Teradataが提供する一連のライブラリ関数でUDT引数の値を取得または設定します。詳細については、<Teradata Vantage™- SQL外部ルーチン プログラミング、B035-1147>を参照してください。
UDTのデータ変換グループ ルーチンに指定される事前定義タイプを、UDTの外部タイプといいます。外部タイプは常にTeradataサーバー形式です。つまり、UDT固有のtosql操作とfromsql操作に続けて、通常のクライアント形式からデータベース形式へのデータ変換も実行されます。
tosql操作の場合、これは以下のアクションが指定された順序で発生することを意味します。
- システムは、UDTの外部タイプをクライアント形式からデータベース形式にデータ変換します。
- システムはtosqlルーチンを実行します。
fromsql操作の場合、これは以下のアクションが指定された順序で行われることを意味します。
- システムはfromsqlルーチンを実行して、UDTを外部タイプのデータベース形式にデータ変換します。
- システムは、外部タイプをデータベース形式からクライアント形式にデータ変換します。