USINGはUDTを明示的にはサポートしません。クライアント アプリケーションは、必ず事前定義のデータ型である外部型形式でUDTデータをTeradataプラットフォームに転送する必要があります。このとき、USINGリクエスト修飾子によりUDTをインポートするために、暗黙的または明示的なCASTのいずれかを使用することができます。
暗黙的なCASTは、次のような代入操作中に呼び出されます。INSERT、UPDATE、およびパラメータ受渡し操作。
- ホスト変数が代入操作で呼び出され、UDTターゲットに代入される。
- 暗黙的なCASTが定義されている。暗黙的なCASTは、次のいずれかにすることができます。
- システム生成の暗黙的なCAST。
- 明示的に作成された暗黙的なCAST。
詳細については、<Teradata Vantage™ SQLデータ定義言語 - 構文規則および例、B035-1144>の「CREATE CAST」を参照してください。
- 以下の例は、クライアントの事前定義データ型からTeradataプラットフォームのDISTINCT型UDTへの暗黙的なCAST変換を示しています。
USING (europe_sales DECIMAL(9,2)) INSERT INTO tab1 VALUES (:europe_sales, 1);
- 以下の例は、コンストラクタ メソッドを使用した明示的な変換および構築操作を示しています。
USING (street VARCHAR(20), zip CHARACTER(5)) INSERT INTO tab2 VALUES (NEW address(:street, :zip), 2 );
- 以下の例は、メソッド呼び出しによる変換を示しています。
USING (price DECIMAL(6,2)) UPDATE tab1 SET column1 = CAST(:price AS euro).roundup(0);
UDT設計の最善の方法については、すべての変換グループ機能を複写して、USINGリクエスト修飾子の最適なサポートを使用可能にすることが推奨されます。これは、同等な事前定義外部データ型からUDTへの、およびUDTから事前定義外部データ型へのCASTのコーディングにより実行できます。これを実現するための最も簡単な方法は、同等なCREATE CASTおよびCREATE TRANSFORM文内の同じルーチンを参照することです。これらの文の使用方法の詳細については、<Teradata Vantage™ SQLデータ定義言語 - 構文規則および例、B035-1144>の「CREATE CAST」および「CREATE TRANSFORM」を参照してください。
これらのガイドラインに従う場合は、反復配列処理もサポートされます。UDTは、USINGリクエスト修飾子内で配列処理について直接参照することはできませんが、暗黙的なCAST(事前定義データ型からUDTへ)のメカニズムを使用して挿入することはできます。
- DISTINCT型UDTの場合、システム生成機能だけの使用を計画している場合は、変換および暗黙的なCAST機能は事前に定義済みのため、何もする必要はありません。
- STRUCTURED型UDTの場合、変換および暗黙的なCAST機能はCREATE CAST文およびCREATE TRANSFORM文を使用して明示的に定義する必要があります。これについては、以下のaddressという名前のUDTの例で示しています。
- 以下のリクエストは、変換グループを作成します。
CREATE TRANSFORM FOR address client_io ( TO SQL WITH SPECIFIC FUNCTION SYSUDTLIB.stringToAddress, FROM SQL WITH SPECIFIC METHOD toString);
- 以下のリクエストは、client_io変換グループのtosql機能を複写する、VARCHAR(100)からaddressへの暗黙的なCASTを作成します。
CREATE CAST ( VARCHAR(100) AS address ) WITH SPECIFIC FUNCTION SYSUDTLIB.stringToAddress AS ASSIGNMENT;
- 以下のリクエストは、client_io変換グループのfromsql機能を複写する、addressからVARCHAR(100)への暗黙的なCASTを作成します。
CREATE CAST (address AS VARCHAR(100)) WITH SPECIFIC METHOD ToString AS ASSIGNMENT ;
- 以下のリクエストは、変換グループを作成します。