ヘッダーをスキップ
Oracle TimesTen In-Memory Database SQLリファレンス・ガイド
リリース7.0
E05176-02
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

数値データ型

数値型では、正および負の固定小数点数と浮動小数点数、0(ゼロ)、無限大、および演算での未定義の結果として生成される値(NaNまたは非数)が格納されます。

正確な数値型と近似値型

TimesTenは、正確な数値型と近似値型の両方のデータ型をサポートします。算術演算は数値型に対してのみ実行できます。同様に、SUM集計およびAVG集計でも数値型が必要になります。

正確な数値型は、次のとおりです。

近似値型は、次のとおりです。

TT_TINYINT型

TT_TINYINTデータ型は、0から255(28-1)の範囲の符号なし整数です。このデータ型で必要な記憶域は1バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。TT_TINYINTを否定するデータ型はTT_SMALLINTです。また、TINYINTを指定することはできません。

例1.6

この例では、Col1という列をデータ型TINYINTで定義するNumericsという表を最初に作成します。エラーが返され、列はデータ型TT_TINYINTで再定義されます。

Command> CREATE TABLE Numerics (Col1 TINYINT);

3300: TINYINT is not a valid type name; use TT_TINYINT instead

The command failed.

Command> CREATE TABLE Numerics (Col1 TT_TINYINT);

Command> describe numerics;

Table USER1.NUMERICS:

  Columns:

    COL1                            TT_TINYINT

1 table found.

(primary key columns are indicated with *)

TT_SMALLINT型

TT_SMALLINTデータ型は、-32,768(-215)から32,767(215 - 1)の範囲の符号付き整数です。このデータ型で必要な記憶域は2バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。SMALLINTデータ型は、定義することはできますが、NUMBER (38)にマップされます。

例1.7

この例では、ALTERを使用して表Numericsを変更し、SMALLINTデータ型でCol2を追加します。表のDESCRIBEは、データ型がNUMBER (38)であることを示します。Col2が削除されます。2つ目のALTER TABLEによって、TT_SMALLINTデータ型でCol2が追加されます。

Command> ALTER TABLE Numerics ADD COLUMN Col2 SMALLINT;

Command> DESCRIBE Numerics;

Table USER1.NUMERICS:

  Columns:

    COL1                            TT_TINYINT

    COL2                            NUMBER (38)

1 table found.

(primary key columns are indicated with *)

Command> ALTER TABLE Numerics DROP COLUMN Col2;

Command> ALTER TABLE Numerics ADD COLUMN Col2 TT_SMALLINT;

Command> DESCRIBE NUMERICS;

Table USER1.NUMERICS:

  Columns:

    COL1                            TT_TINYINT

    COL2                            TT_SMALLINT

1 table found.

(primary key columns are indicated with *)

TT_INTEGER型

TT_INTEGERデータ型は、-2,147,483,648(-2 31)から2,147,483,647(231 -1)の範囲の符号付き整数です。このデータ型で必要な記憶域は4バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。TT_INTEGERのかわりにTT_INTを指定できます。INTEGERまたはINTを指定すると、これらの型はNUMBER (38)にマップされます。

例1.8

この例では、ALTERを使用して表Numericsを変更し、INTデータ型でCol3を追加します。表のDESCRIBEは、データ型がNUMBER (38)であることを示します。Col3が削除されます。2つ目のALTER TABLEによって、INTEGERデータ型でCol2が追加されます。表のDESCRIBEは、データ型がNUMBER (38)であることを示します。Col3が削除されます。次に、Col3およびCol4がTT_INTEGERおよびTT_INTデータ型で追加されます。表のDESCRIBEは、データ型がTT_INTEGERであることを示します。

Command> ALTER TABLE Numerics ADD Col3 INT;

Command> DESCRIBE Numerics;

Table USER1.NUMERICS:

  Columns:

    COL1                            TT_TINYINT

    COL2                            TT_SMALLINT

    COL3                            NUMBER (38)

1 table found.

(primary key columns are indicated with *)

Command> ALTER TABLE Numerics DROP Col3;

Command> ALTER TABLE Numerics ADD Col3 INTEGER;

Command> DESCRIBE Numerics;

Table USER1.NUMERICS:

Columns:

    COL1                            TT_TINYINT

    COL2                            TT_SMALLINT

    COL3                            NUMBER (38)

1 table found.

(primary key columns are indicated with *)

Command> ALTER TABLE Numerics DROP Col3;

Command> ALTER TABLE Numerics ADD COLUMN Col3 TT_INTEGER;

Command> DESCRIBE Numerics;

Table USER1.NUMERICS:

Columns:

    COL1                            TT_TINYINT

    COL2                            TT_SMALLINT

    COL3                            TT_INTEGER

1 table found.

(primary key columns are indicated with *)

Command> ALTER TABLE Numerics ADD Col4 TT_INT;

Command> DESCRIBE Numerics;

Table USER1.NUMERICS:

Columns:

    COL1                            TT_TINYINT

    COL2                            TT_SMALLINT

    COL3                            TT_INTEGER

    COL4                            TT_INTEGER

1 table found.

(primary key columns are indicated with *)

TT_BIGINT型

TT_BIGINTデータ型は、-9,223,372,036,854,775,808(-263)から9,223,372,036,854,775,807(263-1)の範囲の符号付き整数です。このデータ型で必要な記憶域は8バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。BIGINTは指定できません。

例1.9

この例では、ALTERを使用して表Numericsを変更し、BIGINTデータ型でCol5を追加します。エラーが生成されます。2つ目のALTER TABLEによって、TT_BIGINTデータ型でCol5が追加されます。

Command> ALTER TABLE Numerics ADD COLUMN Col5 BIGINT;

3300: BIGINT is not a valid type name; use TT_BIGINT instead

The command failed.

Command> ALTER TABLE Numerics ADD COLUMN Col5 TT_BIGINT;

Command> DESCRIBE Numerics;

Table USER1.NUMERICS:

  Columns:

    COL1                            TT_TINYINT

    COL2                            TT_SMALLINT

    COL3                            TT_INTEGER

    COL4                            TT_INTEGER

    COL5                            TT_BIGINT

1 table found.

(primary key columns are indicated with *)

NUMBER型

NUMBERデータ型は、1.0×10 -130から1.0×10 126未満の絶対値を含む正と負の固定数値および0(ゼロ)を格納します。各NUMBER値には、5から22バイトが必要です。

固定小数点数を次のように指定します。

NUMBER (p)

ここで、

NUMBER (p)

これは、精度pおよびスケール0の固定小数点数を表すため、NUMBER (p,0)と同じです。

浮動小数点数を次のように指定します。

NUMBER

精度およびスケールを指定しない場合は、最大精度および最大スケールが使用されます。

例1.10

この例では、ALTERを使用して表Numericsを変更し、異なる精度とスケールを指定したNUMBERデータ型で定義された列Col6、Col7、Col8およびCol9を追加します。

Command> ALTER TABLE NUMERICS ADD COL6 NUMBER;

Command> ALTER TABLE Numerics ADD Col7 NUMBER (4,2);

Command> ALTER TABLE Numerics ADD Col8 NUMBER (4,-2);

Command> ALTER TABLE Numerics ADD Col8 NUMBER (2,4);

Command> ALTER TABLE Numerics ADD Col9 NUMBER (2,4);

Command> DESCRIBE NUMERICS;

Table USER1.NUMERICS:

  Columns:

    COL1                            TT_TINYINT

    COL2                            TT_SMALLINT

    COL3                            TT_INTEGER

    COL4                            TT_INTEGER

    COL5                            TT_BIGINT

    COL6                            NUMBER

    COL7                            NUMBER (4,2)

    COL8                            NUMBER (4,-2)

    COL9                            NUMBER (2,4)

1 table found.

(primary key columns are indicated with *)

例1.11

この例では、CREATEを使用して表NumberComboを作成し、異なる精度とスケールを指定したNUMBERデータ型で列を定義します。値123.89が列に挿入されます。

Command> CREATE TABLE NumberCombo (Col1 NUMBER, Col2 NUMBER (3),

Col3 NUMBER (6,2), Col4 NUMBER (6,1), Col5 NUMBER (6,-2));

Command> DESCRIBE NumberCombo;

Table USER1.NUMBERCOMBO:

  Columns:

    COL1                            NUMBER

    COL2                            NUMBER (3)

    COL3                            NUMBER (6,2)

    COL4                            NUMBER (6,1)

    COL5                            NUMBER (6,-2)

1 table found.

(primary key columns are indicated with *)

Command> INSERT INTO NumberCombo VALUES (123.89,123.89,123.89,123.89,123.89);

1 row inserted.

Command> VERTICAL ON;

Command> SELECT * FROM NumberCombo;

COL1:   123.89

  COL2:   124

  COL3:   123.89

  COL4:   123.9

  COL5:   100

1 row found.

例1.12

この例では、CREATEを使用して表を作成し、NUMBER (4,2)データ型で列を定義します。INSERTを使用して値123.89を挿入しようとすると、オーバーフローのエラーになります。

Command> CREATE TABLE InvNumberValue (Col6 NUMBER (4,2));

Command> INSERT INTO InvNumberValue VALUES (123.89);

2923: Number type value overflow

The command failed.

例1.13

この例では、CREATEを使用して表を作成し、精度より大きいスケールを使用したNUMBERデータ型で列を定義します。値が列に挿入されます。

Command> CREATE TABLE NumberCombo2 (Col1 NUMBER (4,5),

Col2 NUMBER (4,5), Col3 NUMBER (4,5), Col4 NUMBER (2,7),

Col5 NUMBER (2,7), Col6 NUMBER (2,5), Col7 NUMBER (2,5));

Command> INSERT INTO NumberCombo2 VALUES (.01234, .00012, .000127, .0000012, .00000123, 1.2e-4, 1.2e-5);

1 row inserted.

Command> DESCRIBE NumberCombo2;

Table USER1.NUMBERCOMBO2:

  Columns:

    COL1                            NUMBER (4,5)

    COL2                            NUMBER (4,5)

    COL3                            NUMBER (4,5)

    COL4                            NUMBER (2,7)

    COL5                            NUMBER (2,7)

    COL6                            NUMBER (2,5)

    COL7                            NUMBER (2,5)

1 table found.

(primary key columns are indicated with *)

Command> SELECT * FROM NumberCombo2;

COL1:   .01234

  COL2:   .00012

  COL3:   .00013

  COL4:   .0000012

  COL5:   .0000012

  COL6:   .00012

  COL7:   .00001

1 row found.

浮動小数点数

浮動小数点数には、小数点を含めることも、含めないこともできます。また、浮動小数点数の範囲は、指数を使用して拡張することができます(たとえば、1.2 e-20などです)。浮動小数点数ではスケールを使用しません。これは、小数点の後に表示できる桁数が制限されていないためです。

バイナリの浮動小数点数は、バイナリ精度(数字0と1)を使用して格納されます。NUMBERデータ型の場合は、10進数の精度(数字0から9)を使用して格納されます。

NUMBERでサポートされている範囲と精度内にあるリテラル値は、NUMBERとして格納されます。これは、リテラルが10進数の精度を使用して表されるためです。

BINARY_FLOAT

BINARY_FLOATは、32ビットの単精度の浮動小数点数です。

BINARY_DOUBLE

BINARY_DOUBLEは、64ビットの倍精度の浮動小数点数です。

BINARY_FLOATおよびBINARY_DOUBLEはいずれも、特別な値であるInf、-InfおよびNaN(非数)をサポートし、IEEE標準に準拠しています。

浮動小数点数の制限は次のとおりです。

例1.14

この例では、CREATEを使用して表を作成し、BINARY_FLOATおよびBINARY_DOUBLEデータ型で2つの列を定義します。

Command> CREATE TABLE BfBd (Col1 BINARY_FLOAT, Col2 BINARY_DOUBLE);

Command> DESCRIBE BfBd;

Table UISER1.BFBD:

  Columns:

    COL1                            BINARY_FLOAT

    COL2                            BINARY_DOUBLE

1 table found.

(primary key columns are indicated with *)

FLOATおよびFLOAT (n)

TimesTenでは、ANSI型FLOATもサポートされています。FLOATは正確な数値型で、NUMBER型として実装されます。数値nは、値が格納できる精度のビット数を示します。値の範囲は1から126です。バイナリ精度から10進数の精度に変換するには、nに0.30103を乗算します。10進数の精度からバイナリ精度に変換するには、10進数の精度に3.32193を乗算します。バイナリ精度の最大値126桁は、10進数の精度では約38桁に相当します。