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 ); |
以下の手順による、ミュテーター メソッドの有効な呼び出し。
|
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の有効な挿入。 |