数値データ型
数値型では、正および負の固定小数点数と浮動小数点数、0(ゼロ)、無限大、および演算での未定義の結果として生成される値(NaN(非数))が格納されます。
TimesTenは、正確な数値型と近似値型の両方のデータ型をサポートします。算術演算は数値型に対してのみ実行できます。同様に、SUM集計およびAVG集計でも数値型が必要になります。
正確な数値型は次のとおりです。
近似値型は、次のとおりです。
NUMBER
NUMBERデータ型は、0(ゼロ)と、絶対値が1.0×10-130以上1.0×10126未満の範囲にある正と負の固定小数点数を格納します。NUMBERの各値は5から22バイトである必要があります。
固定小数点数はNUMBER(p,s)として指定します。
-
引数
pは精度(有効な10進数の総桁数)です。最上位桁は最も左にあるゼロ以外の桁で、最下位桁は最も右の既知の桁です。 -
引数
sはスケール(小数点から最下位桁までの桁数)です。スケールの範囲は-84から127です。-
正のスケールは、小数点の右側にある最下位桁まで(最下位桁も含む)の有効桁数です。
-
スケールが負の場合、小数点の左側にある桁数です。この場合は最下位有効桁を含みません。スケールが負の場合、数値は整数部分の右から指定された桁数のみ丸められるため、最下位有効桁は小数点の左側になります。
-
スケールは、精度より大きくできます。たとえば、E表記法があります。スケールが精度より大きい場合、精度は小数点の右側の最大有効桁数を指定します。たとえば、列をNUMBER(4,5)型として定義し、その列に.000127を挿入すると、その値は.00013として格納されます。小数点以下1桁目の数字はゼロである必要があります。TimesTenでは、値は小数点以下5桁に丸められます。
値が精度を超えると、エラーが戻されます。値がスケールを超えると、その値は丸められます。
NUMBER(p)は、精度pおよびスケール0の固定小数点数を表しているため、NUMBER(p,0)と同じです。
浮動小数点数はNUMBERとして指定してください。精度およびスケールを指定しない場合は、最大精度および最大スケールが使用されます。
次の例では、NUMBERデータ型で定義され、異なる精度とスケールが指定された列col6、col7、col8およびcol9を追加することにより、表numericsを変更します。
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 *)
次の例では、表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.
次の例では、表を作成し、NUMBER(4,2)データ型で列を定義します。値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.
次の例では、表を作成し、精度より大きいスケールを使用した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.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は指定できません。
次の例では、表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 *)
TT_INTEGER
TT_INTEGERデータ型は、-2,147,483,648(-231)から2,147,483,647(231 -1)の範囲の符号付き整数です。このデータ型で必要な記憶域は4バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。TT_INTEGERのかわりにTT_INTを指定できます。INTEGERまたはINTを指定すると、これらの型はNUMBER(38)にマップされます。
次の例では、表numericsを変更し、INTデータ型でcol3を追加します。表の説明にデータ型がNUMBER(38)であることが示されています。列col3は削除されます。2つ目のALTER TABLEによって、INTEGERデータ型でcol2が追加されます。表の説明にデータ型がNUMBER(38)であることが示されています。列col3は削除されます。次に、データ型TT_INTEGERおよびTT_INTで、列col3およびcol4が追加されます。表の説明に両方のデータ型が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 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 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_SMALLINT
TT_SMALLINTデータ型は、-32,768(-215)から32,767(215-1)の範囲の符号付き整数です。このデータ型で必要な記憶域は2バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。SMALLINTデータ型は、指定することはできますが、NUMBER(38)にマップされます。
次の例では、表numericsを変更し、SMALLINTデータ型でcol2を追加します。表の説明にデータ型が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 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_TINYINT
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; useTT_TINYINTinstead The command failed. Command> CREATE TABLE numerics (col1TT_TINYINT); Command> DESCRIBE numerics; Table USER1.NUMERICS: Columns: COL1 TT_TINYINT 1 table found. (primary key columns are indicated with *)
浮動小数点数
浮動小数点数には、小数点を含めることも、含めないこともできます。また、浮動小数点数の範囲は、指数を使用して拡張することができます(たとえば、1.2E-20などです)。
浮動小数点数ではスケールを使用しません。これは、小数点の後に表示できる桁数が制限されていないためです。
バイナリの浮動小数点数は、バイナリ精度(数字0と1)を使用して格納されます。NUMBERデータ型の場合は、10進数の精度(数字0から9)を使用して格納されます。
NUMBERでサポートされている範囲と精度内にあるリテラル値は、NUMBERとして格納されます。これは、リテラルが10進数の精度を使用して表されるためです。
浮動小数点数には、次のいずれかのデータ型を使用します。
BINARY_DOUBLE
BINARY_DOUBLEは、64ビット倍精度の浮動小数点数です。
BINARY_FLOATおよびBINARY_DOUBLEはいずれも、特別な値であるInf、-InfおよびNaN(非数)をサポートし、IEEE標準に準拠しています。
浮動小数点数の制限は次のとおりです:
-
BINARY_FLOAT-
正の最小有限値: 1.17549E-38F
-
正の最大有限値: 3.40282E+38F
-
-
BINARY_DOUBLE-
正の最小有限値: 2.22507485850720E-308
-
正の最大有限値: 1.79769313486231E+308
-
次の例では表を作成し、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 *)