DISTINCT型UDT用のシステム生成デフォルト機能 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage
DISTINCT型UDTを作成すると、Teradata Databaseは以下の追加のUDT関連機能を自動的に生成します。
  • DISTINCT型UDTをそのソース データ型にマップしてクライアント アプリケーションが使用できるようにするデータ変換、およびソース データ型を対応するDISTINCT型UDTにマップしてTeradata Databaseアプリケーションが使用できるようにする変換を含むデータ変換グループ。

    システムは、生成したデータ変換グループにTD_identifierという形式で名前を割り当てます。この名前は30文字までで切り捨てられますが、identifierはDISTINCT型UDT名の修飾されていない部分です。

    このデータ変換グループには、tosqlとfromsqlの両方の機能が含まれ、クライアント システムとTeradata Databaseとの間でのUDTのインポートとエクスポートをサポートします。

    DROP TRANSFORM文とREPLACE TRANSFORM文を使用して、システム生成のデータ変換機能をそれぞれ削除または置換することができます(DROP TRANSFORMおよびCREATE TRANSFORMおよびREPLACE TRANSFORMを参照)。

    システム生成のfromsql機能は、DISTINCTデータ型値を対応するソース データ型値に変換します。

    逆に、システム生成のtosql機能は、ソース データ型値をDISTINCTデータ型値に変換します。DISTINCTデータ型の外部タイプは、デフォルトでソース データ型です。

    システム生成かユーザー定義かを問わず、DISTINCT型UDTが定義済みのデータ変換グループを持っており、SELECT文の列リストにDISTINCT型UDTの列または式が含まれている場合、システムは定義済みのfromsqlデータ変換ルーチンを使用して、DISTINCT型をその外部タイプに自動的に変換します。

  • ソース タイプがLOBではない場合に比較をサポートする、完全マップ順序付け。

    ソース タイプがLOBではない場合、DISTINCT型の2つの値を比較するときに対応するソース タイプ値を比較する順序付けを、システムは自動的に作成します。例えば、2つのeuro値を比較した場合、その結果は2つのDECIMAL値を比較したときと同じになります。

    2つのDISTINCT型UDT値を比較する場合、システムは次のプロセスを実行します。
    1. UDTをソース データ型に変換します。
    2. ソース データ型を比較します。

      この比較の結果を、DISTINCT型UDTの比較の結果として使用します。

    DISTINCT型UDTの列または式を直接ソース タイプ値と比較することはできません。DISTINCT型UDT値またはソース タイプ値を、明示的な組み込みキャストによって一方の値から他方の値にまず変換する必要があります。

    同様に、異なるDISTINCT型どうしを直接比較することはできません。ユーザー定義キャストによって一方のDISTINCT型UDTを他方のタイプにまず変換する必要があります。

    システム生成のデータ変換機能の場合のように、デフォルトでシステムが生成した順序付け機能を削除し、独自の変換機能で置き換えることができます。

    ソース タイプがLOBの場合は、特別なルールが適用されます。imageという名前のDISTINCT型のソース タイプがBLOBであるとします。デフォルトでは、LOBデータ型を比較することはできないため、比較操作はサポートされていません。たしかに、システム生成の順序付け機能はありませんが、任意のテーブルの列タイプを定義するためにimageを使用する前に、そのための順序付けを定義することはやはり必要です。新しく作成したデータ型を使おうとしたものの、どのテーブルのどの列のタイプに関する順序付けも定義されていない場合、リクエスト側にエラーが返されます。

    UDTは強い型付けのルールに従うので、DISTINCT型値をそのソース データ型の値と直接比較することはできません。その代わりに、双方の値の比較を実行する前に、システム生成のキャストを使用してソース タイプ値をDISTINCT型UDTに明示的にキャストする(またはその逆にキャストする)必要があります。

    順序付けの詳細については、CREATE ORDERINGおよびREPLACE ORDERINGを参照してください。

  • DISTINCT型UDT値をソース タイプ値に変換するためのキャスト。

    割当て操作中に、このキャストを暗黙的または明示的に呼び出すことができます。このキャストを明示的に呼び出す構文は、以下のとおりです。

        CAST (distinct_UDT_expression  AS  predefined_data_type).
    割当て操作は、次のどのSQL操作としてでも定義されます。
    • 挿入
    • 更新
    • パラメータの受渡し

      オプションで、追加のキャスト操作を定義したり、システム生成のキャストを削除または置換したりすることもできます。

      キャストの詳細については、CREATE CASTとREPLACE CASTを参照してください。

  • ソース タイプ値をDISTINCT型UDT値に変換するためのキャスト。

    割当て操作中に、このキャストを暗黙的または明示的に呼び出すことができます。このキャストを明示的に呼び出す構文は、以下のとおりです。

        CAST (predefined_type_expression  AS  distinct_UDT_name).
    割当て操作は、次のどのSQL操作としてでも定義されます。
    • 挿入
    • 更新
    • パラメータの受渡し

      オプションで、追加のキャスト操作を定義したり、システム生成のキャストを削除または置換したりすることもできます。

データ変換、順序付け、およびキャストを削除できるのは、関連付けられているUDTがどのテーブルの列データ型としても使用されていない場合だけです。テーブルの列タイプとして使用しているUDTの順序付けまたはデータ変換機能を削除しようとすると、システムはリクエスト側にエラーを返します。

UDTに関連付けられているデータ変換、順序付け、およびキャストは、その型の列を削除しなくても置換できます