17.10 - UDT列への挿入 - 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
日本語 (日本)

DISTINCT型UDT列への挿入

DISTINCT型の列に挿入するには、以下のいずれかが当てはまらなければなりません。
  • 挿入される値が列と同じDISTINCT型でなければならない。
  • システム生成またはユーザー定義のいずれかのCASTが存在していなければならない。これは挿入される値の型を列の固有型に変換するもので、CASTはAS ASSIGNMENTオプションで作成されています。Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144のCREATE CASTを参照してください。
DISTINCT型の値は、次のいずれかから構成できます。
  • ターゲットが同じDISTINCT型のCAST式。
  • 同じDISTINCT型を戻すインスタンス メソッド呼び出し。
  • 同じDISTINCT型を戻すUDF呼び出し。
  • 列参照。
  • null。

例えば、以下の2つのテーブル定義があると仮定します。

     CREATE TABLE table_1 (
       column1 euro,
       column2 INTEGER)
     UNIQUE PRIMARY INDEX(column2);
     CREATE TABLE table_2 (
       column1 euro,
       column2 INTEGER)
     UNIQUE PRIMARY INDEX(column2);

この場合、以下のテーブル内の情報はtrueになります。

コメント
INSERT INTO table_1
VALUES (5.64, 1);	
DECIMAL型をDISTINCT型のeuroに変換する、システム生成またはユーザー定義の、AS ASSIGNMENTが指定されたCASTがある場合に有効です。
INSERT INTO table_1
VALUES (CAST(5.64 AS euro), 1);	
明示的CASTがソース タイプからeuroへの変換に指定されているため、有効です。
INSERT INTO table_1
SELECT CAST(us_dollar_col AS euro), c2
FROM us_sales;	
us_dollarからeuroへのCASTが有効な場合に有効です。
INSERT INTO table_1 						
SELECT column1.roundup(0), column2
FROM TAB2;	
メソッドroundup()がeuro型を戻す場合に有効です。
INSERT INTO table_1 						
SELECT column1, column2 from table_2;	
有効な列参照。
INSERT INTO table_1
VALUES (NULL, 8);
リクエストがnullをDISTINCT型の列に挿入するため、有効です。

STRUCTURED型UDT列への挿入

STRUCTURED型の列に挿入するには、以下のいずれかが当てはまらなければなりません。
  • 挿入される値が同じSTRUCTURED型でなければならない。
  • CASTが存在していなければならない。これは挿入される値の型を列のSTRUCTURED型に変換するもので、CASTはAS ASSIGNMENTオプションで作成されています。<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE CAST文」を参照してください。
STRUCTURED型は、次のいずれかから構成できます。
  • NEW指定(コンストラクタ メソッド呼び出し)。
  • コンストラクタ関数呼び出し。
  • 同じSTRUCTURED型を戻すUDF呼び出し。
  • ミュテーター メソッド呼び出し。
  • 同じSTRUCTURED型を戻すインスタンス メソッド呼び出し。
  • ターゲット データ型が同じSTRUCTURED型のCAST式。
  • 列参照。
  • null。

例えば、以下の2つのテーブル定義があると仮定します。

     CREATE TABLE table_1 (
       column1 address,
       column2 INTEGER)
     UNIQUE PRIMARY INDEX(column2);
     CREATE TABLE table_2 (
       column1 address,
       column2 INTEGER)
     UNIQUE PRIMARY INDEX(column2);

この場合、以下のテーブル内の情報はtrueになります。

コメント
INSERT INTO table_1
VALUES ('17095 Via Del Campo;92127', 1 );
文字列をSTRUCTURED型のaddressに変換する、AS ASSIGNMENTが指定されたCASTがある場合に有効です。
USING (addr VARCHAR(30), c2 INTEGER)
INSERT INTO table_1 (:addr, :c2 );	
文字列をSTRUCTURED型のaddressに変換する、AS ASSIGNMENTが指定されたCASTがある場合に有効です。
INSERT INTO table_1
VALUES (NEW address('17095 Via Del Campo', '92127'), 1 );	
コンストラクタ メソッドの有効な呼び出し。
USING (street varchar(20), zip char(5))
INSERT INTO TAB1
VALUES (NEW address(:street, :zip), 2 );	
ホスト変数がある、コンストラクタ メソッドの有効な呼び出し。
INSERT INTO TAB1
VALUES ( NEW address(), 3 );	
コンストラクタ関数の有効な呼び出し。
INSERT INTO TAB1
VALUES ( NEW address().street('17095 Via Del Campo').zip('92127'), 4 );	
以下の手順による、ミュテーター メソッドの有効な呼び出し。
  1. コンストラクタ関数が呼び出されます。

    結果は、属性値がそのデフォルトに設定されるaddress値です。

  2. street属性のミュテーターが呼び出されます。

    結果は、変更されたstreet属性を持つ、更新されたaddress値です。

  3. zip属性のミュテーターが呼び出されます。

    結果は、変更されたzip属性を持つ、もう1つの更新されたaddress値です。この結果には、street属性への直前の変更も含まれます。

  4. 結果のaddress値は、table_1のcolumn1に挿入されます。
INSERT INTO table_1
  SELECT empl.residence(), table_2.column2
  FROM table_2, table_3;	
empl.residence()メソッドがaddressデータ型を戻す場合に有効です。
INSERT INTO table_1
  VALUES (SELECT CAST(intl_addr_col AS           address), c2)
FROM table_x;   	
intl_addrからSTRUCTURED型のaddressへのCASTが有効な場合に有効です。
INSERT INTO table_1
SELECT column1, column2
FROM table_2;	
有効な列参照。
INSERT INTO table_1
VALUES (NULL, 8);
STRUCTURED型の列へのnullの有効な挿入。