UDTデータ型構文 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - データ タイプおよびリテラル

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/zsn1556242031050.ditamap
dita:ditavalPath
ja-JP/zsn1556242031050.ditaval
dita:id
B035-1143
Product Category
Software
Teradata Vantage
[SYSUDTLIB.] udt_name [ attribute [...] ]
SYSUDTLIB.
すべてのUDTが作成されるデータベースの名前。
udt_name
CREATE TYPE文によって作成されたUDTの名前。
attribute
適切なデータ型属性。
UDT列では、以下の属性がサポートされます。
  • NULL
  • NOT NULL
  • FORMAT
  • TITLE
  • NAMED
  • DEFAULT NULL
UDTによるデータ型属性の使用に関する詳細は、以下を参照してください。
UDT列は列記憶または列制約属性をサポートしません。

ANSI準拠

UDTは、ANSI SQL:2011に準拠しています。

UDTのタイプ

Teradata Databaseは、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としてさらに分類できます。

UDT 条件 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には、クライアント アプリケーションとサーバー間のインポートおよびエクスポート操作のためにTeradata Databaseが使用する、対応する事前定義のSQLデータ型があります。特定のUDTにマップする事前定義データ型は、UDTに関連付けられた変換定義で指定されます。

UDT 结果
DISTINCT型 Teradata Databaseは、UDTを元の事前定義データ型にマップする、インポートおよびエクスポート操作のためのデフォルトの変換定義を自動的に生成します。

例えば、euroという名前のDISTINCT型UDTがDECIMAL(8,2)データ型に基づいているとします。

Teradata Databaseが自動生成する変換定義により、クライアント アプリケーションは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>の「CREATE TRANSFORM」を参照してください。

UDTの外部表現の詳細については、UDTの外部表現を参照してください。

複数変換グループのサポート

CREATE TRANSFORMまたはREPLACE TRANSFORM文を使用して、各UDTの複数の変換グループを作成できます。また、CREATE TRANSFORMを使用すると、既存の変換グループがすでにあるUDTに変換グループを追加できます。REPLACE TRANSFORMは、UDTに対してすべての既存の変換グループを削除し、UDTに対して新しい変換グループを作成します。また、DROP TRANSFORMを使用してUDTから変換グループを削除することができます。

特定のUDTに許容される変換グループの最大数は16です。

CREATE TRANSFORMまたはREPLACE TRANSFORMを使用して、複合データ型(CDT)の新しい変換を作成することはできません。構造化された固有のユーザー定義型(UDT)に対してのみ、新しい変換を作成できます。

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列を持つテーブルを作成するには、SYSUDTLIBデータベースに対するUDTUSAGE、UDTTYPE、またはUDTMETHOD権限、あるいは指定されたUDTに対するUDTUSAGE権限が必要です。

UDT列でクエリーを実行するには、指定されたUDTに対するUDTUSAGE権限が必要です。

制限

  • インデックス テーブル、結合インデックス、またはハッシュ インデックスを作成するときに、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>を参照してください。

また、以下が真である場合、順序付き分析関数を除く、ほとんどのSQL関数および演算子でUDTを使用することができます。
  • 関数または演算子が受け入れる事前定義タイプにUDTをキャストする暗黙的なキャスト定義が存在する。
  • DisableUDTImplCastForSysFuncOp DBS Controlフィールドがゼロに設定されている。

SQL関数および演算子とともにUDTを使用する方法については、<Teradata Vantage™ - SQL関数、式、および述部、B035-1145> を参照してください。

関連トピック

詳細情報 参照先
UDTをサポートする関数と演算子 Teradata Vantage™ - SQL関数、式、および述部、B035-1145
UDTを処理するUDF、UDM、および外部ストアド プロシージャの機能のインプリメント Teradata Vantage™ - SQL外部ルーチン プログラミング、B035-1147
UDT定義の作成 <Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE TYPE」
変換定義の作成および削除
  • <Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE TRANSFORMおよびREPLACE TRANSFORM」
  • <Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>の「DROP TRANSFORM」
ユーザーへのデフォルト以外の変換グループ設定の指定 <Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE/MODIFY PROFILE」および「CREATE/MODIFY USER」
キャスト定義の作成 <Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE CAST」
UDT列を持つテーブルの作成 <Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE TABLE」
DisableUDTImplCastForSysFuncOp DBS制御フィールド Teradata Vantage™ - データベース ユーティリティ、B035-1102