暗黙的なデータ型変換

あるデータ型から別のデータ型への変換が適切である場合、TimesTenは値を変換します。

表1-6および表1-7に、TimesTenの暗黙的なデータ型変換をマトリックスで示します。セル内のYESは、その変換がサポートされていることを示します。セル内のNOは、その変換がサポートされていないことを示します。表の後に、暗黙的な変換のルールを示します。

表1-6 暗黙的なデータ型変換

空白 CHAR VARCHAR2 NCHAR NVARCHAR2 DATE TT_DATE TIMESTAMP TT_TIMESTAMP

CHAR

該当なし

YES

YES

YES

YES

YES

YES

YES

VARCHAR2

YES

該当なし

YES

YES

YES

YES

YES

YES

NCHAR

YES

YES

該当なし

YES

YES

YES

YES

YES

NVARCHAR2

YES

YES

YES

該当なし

YES

YES

YES

YES

DATE

YES

YES

YES

YES

該当なし

YES

YES

YES

TT_DATE

YES

YES

YES

YES

YES

該当なし

YES

YES

TIMESTAMP

YES

YES

YES

YES

YES

YES

該当なし

YES

TT_TIMESTAMP

YES

YES

YES

YES

YES

YES

YES

該当なし

NUMERIC

YES

YES

YES

YES

NO

NO

NO

NO

BLOB

NO

NO

NO

NO

NO

NO

NO

NO

CLOB

YES

YES

YES

YES

NO

NO

NO

NO

NCLOB

YES

YES

YES

YES

NO

NO

NO

NO

BINARY/ VARBINARY

YES

YES

YES

YES

NO

NO

NO

NO

ROWID

YES

YES

YES

YES

NO

NO

NO

NO

表1-7 暗黙的なデータ型変換(前の表の続き)

空白 NUMERIC BLOB CLOB NCLOB BINARY/ VARBINARY ROWID

CHAR

YES

YES

YES

YES

YES

YES

VARCHAR2

YES

YES

YES

YES

YES

YES

NCHAR

YES

YES

YES

YES

YES

YES

NVARCHAR2

YES

YES

YES

YES

YES

YES

DATE

NO

NO

NO

NO

NO

NO

TT_DATE

NO

NO

NO

NO

NO

NO

TIMESTAMP

NO

NO

NO

NO

NO

NO

TT_TIMESTAMP

NO

NO

NO

NO

NO

NO

NUMERIC

該当なし

NO

NO

NO

NO

NO

BLOB

NO

該当なし

NO

NO

YES

NO

CLOB

NO

NO

該当なし

YES

NO

NO

NCLOB

NO

NO

YES

該当なし

NO

NO

BINARY/ VARBINARY

NO

YES

YES

YES

該当なし

NO

ROWID

NO

NO

NO

NO

NO

該当なし

次のルールが適用されます。

  • 文字データ型と非文字データ型に対する算術演算および比較中に、TimesTenはすべての文字データ型を数値または日時のいずれかの適切なデータ型に変換します。CHAR/VARCHAR2NCHAR/NVARCHAR2の算術演算では、TimesTenはNUMBERに変換します。

  • 算術演算では、文字値を数値に変換する場合、浮動小数点値INFおよびNANはサポートされません。

  • 連結操作では、TimesTenにより、他のオペランドに応じて、文字データ型以外のデータ型がCHARNCHARVARCHAR2またはNVARCHAR2に変換されます。

  • 数値と文字値を比較する場合、TimesTenは文字データを数値に変換します。

  • 数値と日時値を比較する場合、TimesTenは文字データを日時値に変換します。

  • タイムスタンプ値からDATE値への変換では、タイムスタンプ値の秒の小数部は切り捨てられます。

  • BINARY_FLOATからBINARY_DOUBLEへの変換は正確に行われます。

  • BINARY_DOUBLEの値がBINARY_FLOATでサポートされている精度のビット数よりも多いビット数を使用している場合、BINARY_DOUBLEからBINARY_FLOATへの変換は正確に行われません。

  • 文字値または正確な数値(TT_TINYINTTT_SMALLINTTT_INTEGERTT_BIGINTNUMBER)と浮動小数点値(BINARY_FLOATBINARY_DOUBLE)間で変換を行うと、不正確になる場合があります。これは、文字値および正確な数値では10進数の精度が使用され、浮動小数点数ではバイナリ精度が使用されるためです。

  • 数値を操作する際、TimesTenは、通常、最大容量を確保するために精度およびスケールを調整します。この場合、このような操作によって変換された数値データ型は、基礎となる表に含まれる数値データ型と異なることがあります。

  • 代入を実行する場合、TimesTenは等号(=)の右側の値を左側の代入ターゲットのデータ型に変換します。

  • SQL関数または演算子に不当なデータ型の引数を指定して使用する場合、TimesTenで暗黙的な変換がサポートされていれば、その引数を正当なデータ型に変換します。

  • INSERTINSERT... SELECTおよびUPDATE操作中に、TimesTenは変更する列のデータ型に値を変換します。

  • CHAR/VARCHAR2NCHAR/NVARCHAR2間の暗黙的および明示的な変換がサポートされます。暗黙的な変換の例を次に示します。

    Command> CREATE TABLE convdemo (c1 CHAR (10), x1 TT_INTEGER);
    Command> CREATE TABLE convdemo2 (c1 NCHAR (10), x2 TT_INTEGER);
    Command> INSERT INTO convdemo VALUES ('ABC', 10);
    1 row inserted.
    Command> INSERT INTO convdemo VALUES ('def', 100);
    1 row inserted.
    Command> INSERT INTO convdemo2 SELECT * FROM convdemo;
    2 rows inserted.
    Command> SELECT x1,x2,convdemo.c1, convdemo2.c1 
             FROM convdemo, convdemo2 
             WHERE Convdemo.c1 = convdemo2.c1;
    X1, X2, C1, C1
    < 10, 10, ABC       , ABC        >
    < 100, 100, def       , def        >
    2 rows found.