数値型では、正および負の固定小数点数と浮動小数点数、0(ゼロ)、無限大、および演算での未定義の結果として生成される値(NaNまたは非数)が格納されます。
TimesTenは、正確な数値型と近似値型の両方のデータ型をサポートします。算術演算は数値型に対してのみ実行できます。同様に、SUM集計およびAVG集計でも数値型が必要になります。
正確な数値型は、次のとおりです。
近似値型は、次のとおりです。
TT_TINYINTデータ型は、0から255(28-1)の範囲の符号なし整数です。このデータ型で必要な記憶域は1バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。TT_TINYINTを否定するデータ型はTT_SMALLINTです。また、TINYINTを指定することはできません。
この例では、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データ型は、-32,768(-215)から32,767(215 - 1)の範囲の符号付き整数です。このデータ型で必要な記憶域は2バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。SMALLINTデータ型は、定義することはできますが、NUMBER (38)にマップされます。
この例では、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データ型は、-2,147,483,648(-2 31)から2,147,483,647(231 -1)の範囲の符号付き整数です。このデータ型で必要な記憶域は4バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。TT_INTEGERのかわりにTT_INTを指定できます。INTEGERまたはINTを指定すると、これらの型はNUMBER (38)にマップされます。
この例では、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データ型は、-9,223,372,036,854,775,808(-2 63)から9,223,372,036,854,775,807(263 -1)の範囲の符号付き整数です。このデータ型で必要な記憶域は8バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。BIGINTは指定できません。
この例では、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データ型は、1.0×10 -130から1.0×10 126未満の絶対値を含む正と負の固定数値および0(ゼロ)を格納します。各NUMBER値には、5から22バイトが必要です。
固定小数点数を次のように指定します。
NUMBER (p)
ここで、
NUMBER (p)
これは、精度pおよびスケール0の固定小数点数を表すため、NUMBER (p,0)と同じです。
浮動小数点数を次のように指定します。
NUMBER
精度およびスケールを指定しない場合は、最大精度および最大スケールが使用されます。
この例では、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 *)
この例では、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.
この例では、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.
この例では、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は、32ビットの単精度の浮動小数点数です。
BINARY_DOUBLEは、64ビットの倍精度の浮動小数点数です。
BINARY_FLOATおよびBINARY_DOUBLEはいずれも、特別な値であるInf、-InfおよびNaN(非数)をサポートし、IEEE標準に準拠しています。
浮動小数点数の制限は次のとおりです。
この例では、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 *)
TimesTenでは、ANSI型FLOATもサポートされています。FLOATは正確な数値型で、NUMBER型として実装されます。数値nは、値が格納できる精度のビット数を示します。値の範囲は1から126です。バイナリ精度から10進数の精度に変換するには、nに0.30103を乗算します。10進数の精度からバイナリ精度に変換するには、10進数の精度に3.32193を乗算します。バイナリ精度の最大値126桁は、10進数の精度では約38桁に相当します。