DISTINCT型の列を更新するには、以下のいずれかが当てはまらなければなりません。
- 更新される値が同じDISTINCT型でなければならない。
- CASTが存在する必要があります。これは更新される値の型を列のDISTINCT型に変換するもので、CASTはAS ASSIGNMENTオプションで定義されています(<Teradata Vantage™ SQLデータ定義言語 - 構文規則および例、B035-1144>の「CREATE CAST」を参照)。
デフォルトでは、DISTINCT型は、この型のシステム生成のCASTを持ちます。
例えば、以下のテーブル定義があると仮定します。
CREATE TABLE table_1 ( column1 euro, column2 INTEGER) UNIQUE PRIMARY INDEX(column2);
以下のテーブル内の情報はtrueになります。
例 | コメント |
---|---|
UPDATE table_1 SET column1 = 4.56 WHERE column2 = 5; |
DECIMALをeuroに変換する、システム生成またはユーザー定義の、AS ASSIGNMENTオプションで定義されたCASTがある場合に有効です。 |
UPDATE table_1 SET column1 = CAST(4.56 AS euro) WHERE column2 = 5; |
DECIMALをeuroに変換する、システム生成またはユーザー定義の、AS ASSIGNMENTオプションを指定して、または指定せずにAS ASSIGNMENTで定義されたCASTがある場合に有効です。 |
USING (price decimal(6,2)) UPDATE table_1 SET column1 = (CAST (:price AS euro)).roundup(0); |
roundup()メソッドがeuro型を返し、DECIMALをeuroに変換するシステム定義またはユーザー定義の、適切なCAST定義がある場合に有効です。 明示的なCAST操作が使用されるので、UDT CASTはAS ASSIGNMENTオプションを使用して定義されている必要がありません。
|
UPDATE table_1 SET column1 = column1.roundup(0); |
roundup()メソッドがeuro型を戻す場合に有効です。 |
UPDATE table_1 SET column1 = column3; |
有効な列参照。 |
UPDATE table_1 SET column1 = NULL WHERE column2 = 10; |
DISTINCT型の列へのNULLの有効な設定。 |