17.10 - UDTのUSINGサポート - 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-1146-171K-JPN
Language
日本語 (日本)

USINGはUDTを明示的にはサポートしません。クライアント アプリケーションは、必ず事前定義のデータ型である外部型形式でUDTデータをVantageプラットフォームに転送する必要があります。このとき、USINGリクエスト修飾子によりUDTをインポートするために、暗黙的または明示的なCASTのいずれかを使用することができます。

暗黙的なCASTは、次のような代入操作中に呼び出されます。INSERT、UPDATE、およびパラメータ受渡し操作。

以下の条件が両方とも当てはまる場合、システムは自動的にクライアント値の事前定義データ型を適切なVantageプラットフォーム値のUDTに、暗黙的なCAST操作によって変換します。
  • ホスト変数が代入操作で呼び出され、UDTターゲットに代入される。
  • 暗黙的なCASTが定義されている。暗黙的なCASTは、次のいずれかにすることができます。
    • システム生成の暗黙的なCAST。
    • 明示的に作成された暗黙的なCAST。

      詳細については、Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144のCREATE CASTを参照してください。

適用できる暗黙的なCASTが定義されていない場合、以下の例で示すとおり、コンストラクタ メソッド、CAST、UDFなどを使用して、明示的な変換を実行する必要があります。
  • 以下の例は、クライアントの事前定義データ型からVantageプラットフォームの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>を参照してください。

これらのガイドラインに従う場合は、反復配列処理もサポートされます。UDTは、USINGリクエスト修飾子内で配列処理について直接参照することはできませんが、暗黙的なCAST(事前定義データ型からUDTへ)のメカニズムを使用して挿入することはできます。

DISTINCT型UDTとSTRUCTURED型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 ;