データ型は値のセットを定義します。データ型の参照は、コンテキストに指定可能な値のセットを指定します。
データ型は、表から検索された値、または式や定数に従って計算された値に応じて決まります。
TimesTenでは、ODBC標準に基づいてデータ型が変換されます。このマニュアルにODBC標準の解説は含まれていません。 詳細は、『Microsoft ODBC 2.0 Programmer's Reference and SDK Guide』または『Microsoft ODBC 3.0 Developer's Kit and Programmer's Reference』の「付録D」を参照してください。
IMDB Cacheを使用している場合は、『Oracle In-Memory Database Cacheユーザーズ・ガイド』のOracleデータ型とTimesTenデータ型のマッピングに関する説明を参照してください。この項では、パススルー問合せで行われる型変換およびキャッシュ・グループの列の作成に有効なデータ型を比較します。
TimesTenでは、デフォルトのOracle型モードで表1-1のデータ型がサポートされています。型モードは、データ・ストア作成属性です。 TypeMode=0
はOracle型モードを示します。TypeMode=1
はTimesTenモードを示します。
型モードの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のTypeModeに関する説明を参照してください。
表1-1 Oracle型モードでサポートされているデータ型
TimesTenでは、Oracle型モードでANSI SQLデータ型がサポートされています。 これらのデータ型は、TimesTenデータ型に変換され、データはTimesTenデータ型として保存されます。 表1-2に、ANSI SQLデータ型とTimesTenデータ型とのマッピングを示します。
表1-2 データ型のマッピング: ANSI SQLからTimesTen
TimesTenでは、Oracle型モードでの下位互換用に表1-3のデータ型がサポートされています。
型モードの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のTypeModeに関する説明を参照してください。
表1-3 Oracle型モードでの下位互換性用にサポートされているデータ型
表1-4の左側の列に示されているデータ型の名前は、以前のリリースのTimesTenで存在していたデータ型です。 TypeMode
が0(デフォルト)に設定され、Oracle型モードを示している場合は、データ型の名前がOracle型モードで新しい名前に変更される可能性があります。 (Oracle型モードでのデータ型名は右側の列に示されています。)この表では、左側の列のデータ型から右側の列の対応するデータ型へのマッピングを示します。
表1-4 データ型のマッピング: TimesTenデータ型からOracle型モードのTimesTenデータ型
TimesTenデータ型 | Oracle型モードでのTimesTenデータ型 |
---|---|
BIGINT |
TT_BIGINT Oracle型モードでは、TT_BIGINTを指定します。 TT_BIGINTの詳細は、「データ型の仕様」を参照してください。 |
BINARY (n) |
BINARY (n) Oracle型モードで、このデータ型は同じ名前を使用します。 BINARY (n)の詳細は、「データ型の仕様」を参照してください。 |
CHAR[ACTER][(n)] |
TT_CHAR [(n [BYTE|CHAR])] Oracle型モードでは、TT_CHARを指定します。文字セマンティクスがサポートされています。 TT_CHAR型の詳細は、「Oracle型モードでの下位互換用にサポートされている型」を参照してください。 |
DATE |
TT_DATE Oracle型モードでは、TT_DATEを指定します。 TT_DATEの詳細は、「データ型の仕様」を参照してください。 |
DEC[IMAL][(p[,s])]または NUMERIC[(p[,s])] |
TT_DECIMAL[(p[,s])] Oracle型モードでは、TT_DECIMALを指定します。 TT_DECIMALの詳細は、「Oracle型モードでの下位互換用にサポートされている型」を参照してください。 |
DOUBLE [PRECISION]または FLOAT [(53)] |
BINARY_DOUBLE Oracle型モードでは、BINARY_DOUBLEを指定します。 BINARY_DOUBLEの詳細は、「データ型の仕様」を参照してください。 |
INT[EGER] |
TT_INT[EGER] Oracle型モードでは、TT_INTEGERを指定します。 TT_INTEGERの詳細は、「データ型の仕様」を参照してください。 |
INTERVAL IntervalQualifier |
INTERVAL IntervalQualifier Oracle型モードで、このデータ型は同じ名前を使用します。 INTERVALの詳細は、「データ型の仕様」を参照してください。 |
NCHAR [(n)] |
TT_NCHAR[(n)] Oracle型モードでは、TT_NCHARを指定します。 TT_NCHARの詳細は、「Oracle型モードでの下位互換用にサポートされている型」を参照してください。 |
NVARCHAR (n) |
TT_NVARCHAR(n) Oracle型モードでは、TT_NVARCHARを指定します。 TT_NVARCHARの詳細は、「Oracle型モードでの下位互換用にサポートされている型」を参照してください。 |
REALまたは FLOAT (24) |
BINARY_FLOAT Oracle型モードでは、BINARY_FLOATを指定します。 BINARY_FLOATの詳細は、「データ型の仕様」を参照してください。 |
SMALLINT |
TT_SMALLINT Oracle型モードでは、TT_SMALLINTを指定します。 TT_SMALLINTの詳細は、「データ型の仕様」を参照してください。 |
TIME |
TIME Oracle型モードで、このデータ型は同じ名前を使用します。 TIMEの詳細は、「データ型の仕様」を参照してください。 |
TIMESTAMP |
TT_TIMESTAMP Oracle型モードでは、TT_TIMESTAMPを指定します。 TT_TIMESTAMPの詳細は、「データ型の仕様」を参照してください。 |
TINYINT |
TT_TINYINT Oracle型モードでは、TT_TINYINTを指定します。 TT_TINYINTの詳細は、「データ型の仕様」を参照してください。 |
VARBINARY (n) |
VARBINARY (n) Oracle型モードで、このデータ型は同じ名前を使用します。 VARBINARY (n)の詳細は、「データ型の仕様」を参照してください。 |
VARCHAR (n) |
TT_VARCHAR (n [BYTE|CHAR]) Oracle型モードでは、TT_VARCHARを指定します。文字セマンティクスがサポートされています。 TT_VARCHARの詳細は、「Oracle型モードでの下位互換用にサポートされている型」を参照してください。 |
文字データ型は、文字(英数字)データをデータベース・キャラクタ・セットまたはUTF-16書式で格納します。
文字データはバイト値を使用する文字列に格納されます。バイト値は、データ・ストア作成時に定義されるデータ・ストア・キャラクタ・セットのいずれかに対応しています。シングルバイト・キャラクタ・セットとマルチバイト・キャラクタ・セットの両方がサポートされています。
キャラクタ・タイプは、次のとおりです。
CHAR型は、固定長文字列を指定します。 CHAR列に値を挿入する際、定義されている列長よりその値が短い場合は、列長にあわせてTimesTenの空白文字が埋め込まれます。CHAR列に値を挿入する際に、その値が定義されている列長より長い場合は、エラーが戻されます。
デフォルトでは、列長はバイトで定義されます。CHAR修飾子を使用し、列長を文字で定義します。文字のサイズは、データベース・キャラクタ・セットに応じて1バイトから4バイトの範囲になります。BYTE修飾子およびCHAR修飾子は、NLS_LENGTH_SEMANTICSパラメータ設定より優先されます。 NLS_LENGTH_SEMANTICSの詳細は、「ALTER SESSION」および『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のグローバリゼーション・サポート属性の設定に関する項を参照してください。
注意: CHAR型を使用すると、長さが0(ゼロ)の文字列はNULLとして解釈されます。TT_CHAR型を使用すると、長さが0(ゼロ)の文字列は、NULL以外の有効な値となります。CHARとTT_CHARの両方で、空白埋め比較セマンティクスが使用されます。 TT_CHAR型は下位互換用にサポートされています。 |
次の例では、表を作成します。列は型CHARおよびTT_CHARを使用して定義されます。これらの型では、空白埋め比較セマンティクスが使用されます。
Command> CREATE TABLE typedemo (name CHAR (20), nnme2 TT_CHAR (20)); Command> INSERT INTO typedemo VALUES ('SMITH ','SMITH '); 1 row inserted. Command> DESCRIBE typedemo; Table USER.TYPEDEMO: Columns: NAME CHAR (20) NAME2 TT_CHAR (20) 1 table found. (primary key columns are indicated with *) Command> SELECT * FROM typedemo; < SMITH , SMITH > 1 row found. Command> # Expect 1 row found; blank-padded comparison semantics Command> SELECT * FROM typedemo WHERE name = 'SMITH'; < SMITH , SMITH > 1 row found. Command> SELECT * FROM typedemo WHERE name2 = 'SMITH'; < SMITH , SMITH > 1 row found. Command> # Expect 0 rows; blank padded comparison semantics. Command> SELECT * FROM typedemo WHERE name > 'SMITH'; 0 rows found. Command> SELECT * FROM typedemo WHERE name2 > 'SMITH'; 0 rows found.
次の例では、表typedemo
を変更し、列name3
を追加します。 列name3
は、文字セマンティクスで定義されます。
Command> ALTER TABLE typedemo ADD COLUMN name3 CHAR (10 CHAR); Command> DESCRIBE typedemo; Table USER.TYPEDEMO: Columns: NAME CHAR (20) NAME2 TT_CHAR (20) NAME3 CHAR (10 CHAR) 1 table found.
NCHARデータ型は、2バイトのUnicode文字の固定長文字列です。NCHARデータ型は、Unicodeの空白文字U+0020 SPACEを使用して指定した長さまで調整されます。空白埋め比較セマンティクスが使用されます。
注意: NCHAR型を使用すると、長さが0(ゼロ)の文字列はNULLとして解釈されます。TT_NCHAR型を使用すると、長さが0(ゼロ)の文字列は、NULL以外の有効な値となります。NCHARとTT_NCHARの両方で、空白埋め比較セマンティクスが使用されます。 TT_NCHAR型は下位互換用にサポートされています。 |
次の例では、ALTERを使用して表typedemoを変更し、列Name4を追加します。データ型はNCHARです。
Command> ALTER TABLE typedemo ADD COLUMN Name4 NCHAR (10); Command> DESCRIBE typedemo; Table USER.TYPEDEMO: Columns: NAME CHAR (20) NAME2 TT_CHAR (20) NAME3 CHAR (10 CHAR) NAME4 NCHAR (10) 1 table found.
VARCHAR2データ型は、可変長文字列を指定します。VARCHAR2列を定義する場合は、バイトまたは文字の最大数を定義します。各値は指定したとおりに格納されます。この値が列の最大長を超えることはできません。
最大長を指定する必要があります。最小値は1バイト以上である必要があります。文字の最大長を指定するには、CHAR修飾子を使用します。たとえば、VARCHAR2 (10 CHAR)です。
文字のサイズは、データベース・キャラクタ・セットに応じて1バイトから4バイトの範囲になります。BYTE修飾子およびCHAR修飾子は、NLS_LENGTH_SEMANTICSパラメータ設定より優先されます。 NLS_LENGTH_SEMANTICSの詳細は、「ALTER SESSION」および『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のグローバリゼーション・サポート属性の設定に関する項を参照してください。
NULL値は、NULL値可能なフィールドごとに、タプル内の単一ビットとして格納されます。 32ビットのプラットフォームでは、値がNULLのNOT INLINE VARCHAR2(n)は(nullビット)+4バイトの記憶域を使用します。値がNULLのINLINE VARCHAR2(n)は(nullビット)+4バイト+nバイト、つまり値がNULLのNOT INLINE VARCHAR2(n)よりもnバイト多い記憶域を使用します。 この記憶域の原則は、すべての可変長データ型(TT_VARCHAR、TT_NVARCHAR、VARCHAR2、NVARCHAR2、VARBINARY)に適用されます。
注意: VARCHARデータ型は使用しないでください。 VARCHAR2を使用してください。 これら2つの型は現在同じ意味で使用されていますが、VARCHARデータ型は、別のセマンティクスを使用する別のデータ型として再定義される予定です。 |
注意: VARCHAR2型を使用すると、長さが0(ゼロ)の文字列はNULLとして解釈されます。TT_VARCHAR型を使用すると、長さが0(ゼロ)の文字列は、NULL以外の有効な値となります。 VARCHAR2では非空白埋め比較セマンティクスが使用されます。 TT_VARCHARでは空白埋め比較セマンティクスが使用されます。 TT_VARCHAR型は下位互換用にサポートされています。 |
次の例では、表typedemo
を変更し、列name5
およびname6
を追加します。 name5
はVARCHAR2型で、name6
はTT_VARCHARで定義されます。 この例では、列name5
での非空白埋め比較セマンティクスの使用方法および列name6
での空白埋め比較セマンティクスの使用方法が示されています。
Command> ALTER TABLE typedemo ADD COLUMN name5 VARCHAR2 (20); Command> ALTER TABLE typedemo ADD COLUMN name6 TT_VARCHAR (20); Command> DESCRIBE typedemo; Table USER.TYPEDEMO: Columns: NAME CHAR (20) NAME2 TT_CHAR (20) NAME3 CHAR (10 CHAR) NAME4 NCHAR (10) NAME5 VARCHAR2 (20) INLINE NAME6 TT_VARCHAR (20) INLINE 1 table found. (primary key columns are indicated with *) Command> #Insert SMITH followed by 5 spaces into all columns Command> INSERT INTO typedemo VALUES > ('SMITH ', 'SMITH ', 'SMITH ', 'SMITH ','SMITH ', 'SMITH'); 1 row inserted. Command> # Expect 0; Nonpadded comparison semantics Command> SELECT COUNT (*) FROM typedemo WHERE name5 = 'SMITH'; < 0 > 1 row found. Command> # Expect 1; Blank-padded comparison semantics Command> SELECT COUNT (*) FROM typedemo WHERE name6 = 'SMITH'; < 1 > 1 row found. Command> # Expect 1; Nonpadded comparison semantics Command> SELECT COUNT (*) FROM typedemo WHERE name5 > 'SMITH'; < 1 > 1 row found. Command> # Expect 0; Blank-padded comparison semantics Command> SELECT COUNT (*) FROM typedemo WHERE name6 > 'SMITH'; < 0 > 1 row found.
NVARCHAR2データ型は、2バイトのUnicode文字の可変長文字列です。NVARCHAR2列を定義する場合は、文字の最大数を定義します。各値は指定したとおりに格納されます。この値が列の最大長を超えることはできません。長さを指定する必要があります。
注意: NVARCHAR2型を使用すると、長さが0(ゼロ)の文字列はNULLとして解釈されます。TT_NVARCHAR型を使用すると、長さが0(ゼロ)の文字列は、NULL以外の有効な値となります。 NVARCHAR2では非空白埋め比較セマンティクスが使用されます。 TT_NVARCHARでは空白埋め比較セマンティクスが使用されます。 TT_NVARCHAR型は下位互換用にサポートされています。 |
次の例では、表typedemo
を変更し、列name7
を追加します。データ型はNVARCHAR2です。
Command> ALTER TABLE typedemo ADD COLUMN Nnme7 NVARCHAR2 (20); Command> DESCRIBE typedemo; Table USER1.TYPEDEMO: Columns: NAME CHAR (20) NAME2 TT_CHAR (20) NAME3 CHAR (10 CHAR) NAME4 NCHAR (10) NAME5 VARCHAR2 (20) INLINE NAME6 TT_VARCHAR (20) INLINE NAME7 NVARCHAR2 (20) INLINE 1 table found.
数値型では、正および負の固定小数点数と浮動小数点数、0(ゼロ)、無限大、および演算での未定義の結果として生成される値(NaN(非数))が格納されます。
TimesTenは、正確な数値型と近似値型の両方のデータ型をサポートします。算術演算は数値型に対してのみ実行できます。同様に、SUM集計およびAVG集計でも数値型が必要になります。
NUMBERデータ型は、1.0 x 10-130から1.0 x 10126未満の絶対値を含む正と負の固定数値および0(ゼロ)を格納します。 各NUMBER値には、5から22バイトが必要です。
固定小数点数はNUMBER (p,s)として指定します。
pは精度(有効な10進数の総桁数)です。最上位桁は最も左にあるゼロ以外の桁で、最下位桁は最も右の既知の桁です。
sはスケール(小数点から最下位桁までの桁数)です。スケールは-84から127の範囲です。
正のスケールは、小数点の右側にある最下位桁まで(最下位桁も含む)の有効桁数です。
負のスケールは、小数点の左側にある最下位桁まで(最下位桁を含まない)の有効桁数です。負のスケールの場合、最下位桁は小数点の左側にあります。これは、数値が小数点の左側の指定桁数で丸められるためです。
スケールは、精度より大きくできます。たとえば、E表記法があります。スケールが精度より大きい場合、精度は小数点の右側の最大有効桁数を指定します。 たとえば、列をNUMBER (4,5)型として定義し、その列に.000127を挿入すると、その値は.00013として格納されます。 小数点の後の最初の桁には0(ゼロ)が必要で、小数点の右側の5番目の桁より後ろの値は丸められます。
値が精度を超えると、エラーが戻されます。値がスケールを超えると、その値は丸められます。
NUMBER (p)は、精度pおよびスケール0の固定小数点数を表すため、NUMBER (p,0)と同じです。
浮動小数点数はNUMBERとして指定してください。精度およびスケールを指定しない場合は、最大精度および最大スケールが使用されます。
次の例では、表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 *)
次の例では、表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データ型は、-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データ型は、-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
が削除されます。 次に、col3
およびcol4
がTT_INTEGERおよびTT_INTデータ型で追加されます。 表の詳細は、データ型が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_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 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_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 *)
浮動小数点数には、小数点を含めることも、含めないこともできます。 また、浮動小数点数の範囲は、指数を使用して拡張することができます(たとえば、1.2 e-20などです)。
浮動小数点数ではスケールを使用しません。これは、小数点の後に表示できる桁数が制限されていないためです。
バイナリの浮動小数点数は、バイナリ精度(数字0と1)を使用して格納されます。NUMBERデータ型の場合は、10進数の精度(数字0から9)を使用して格納されます。
NUMBERでサポートされている範囲と精度内にあるリテラル値は、NUMBERとして格納されます。これは、リテラルが10進数の精度を使用して表されるためです。
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 *)
BINARYデータ型は長さがnバイトの固定長バイナリの値です。 nの値の範囲は1から8300バイトです。BINARYデータ型にはnバイトの記憶域が必要です。データは後続の0(ゼロ)を使用してその列の最大長まで調整されます。ゼロ埋め比較セマンティクスが使用されます。
VARBINARYデータ型は最大長がnバイトの可変長バイナリの値です。 nの値の範囲は1から4,194,304(222)バイトです。
次の例では、表を作成し、2つの列を定義します。 col1
はBINARYデータ型、col2
はVARBINARYデータ型で定義されます。
Command> CREATE TABLE bvar (col1 BINARY (10), col2 VARBINARY (10)); Command> DESCRIBE bvar; Table USER1.BVAR: Columns: COL1 BINARY (10) COL2 VARBINARY (10) INLINE 1 table found. (primary key columns are indicated with *)
式の結果の型は、型の優先順位が最も高いオペランドによって決定されます。 たとえば、TT_INTEGER型とBINARY_FLOAT型の合計は、BINARY_FLOAT型になります。これは、BINARY_FLOATの方がTT_INTEGERより数値の優先順位が高く設定されているためです。同様に、NUMBER型とBINARY_DOUBLE型の積はBINARY_DOUBLE型になります。これは、BINARY_DOUBLE型の優先順位がNUMBER型より高いためです。
数値の優先順位は次のとおりです(高い順位から低い順位へ)。
BINARY_DOUBLE
BINARY_FLOAT
NUMBER
TT_BIGINT
TT_INTEGER
TT_SMALLINT
TT_TINYINT
表またはマテリアライズド・ビューの行のアドレスは、行ID(ROWID)と呼ばれます。 行IDのデータ型はROWIDです。ROWIDは、ROWID擬似列を問い合せることで確認できます。 「ROWIDの指定」を参照してください。
SQL文では、リテラルのROWID値は一重引用符で囲んだ定数として指定してください。次に例を示します。
Command> SELECT ROWID, last_name > FROM employees > WHERE ROWID='BMUFVUAAABTAAAAFi8'; < BMUFVUAAABTAAAAFi8, Hartstein > 1 row found.
ROWIDデータ型は次のように使用できます。
表の列またはマテリアライズド・ビューの列のデータ型として使用できます。
ORDER BY句およびGROUP BY句で使用できます。
INSERT...SELECT文で使用できます。 次の例では、列col1
はROWIDデータ型で定義されています。
INSERT INTO t2(col1) SELECT ROWID FROM t1; INSERT INTO t2(col1) SELECT TO_CHAR(ROWID) FROM t1; INSERT INTO t2(col1) SELECT CAST(ROWID, CHAR(18)) FROM t1; INSERT INTO t2(col1) SELECT CAST(ROWID, CHAR(18)) FROM t1;
暗黙的な型変換は、値の割当てと、ROWIDデータとCHARデータ間またはROWIDデータとVARCHAR2データ間の比較処理でサポートされています。
CHAR、VARCHAR2およびROWIDのオペランドがCASE、COALESCE、DECODEまたはNVL式で組み合せて使用されている場合、結果のデータ型はROWIDになります。 CHAR値およびVARCHAR2値を使用した式は、ROWID値に変換されて式が評価されます。
CONCATなどの文字列関数でROWID値を使用するには、アプリケーションでTO_CHAR関数を使用してROWID値を明示的にCHAR値に変換する必要があります。
日時データ型は、次のとおりです。
DATE値の書式はYYYY-MM-DD HH:MI:SSで、範囲は-4712-01-01(紀元前4712年1月1日)から9999-12-31(西暦9999年12月31日)です。小数秒はありません。DATE型では7バイトの記憶域が必要です。
TimesTenでは、ユーザー指定のNLS_DATE_FORMAT設定はサポートされていません。SQLのTO_CHARおよびTO_DATE関数を使用すると、その他の書式を指定できます。
TIMESTAMP値の書式は、YYYY-MM-DD HH:MI:SS [.FFFFFFFFF]です。小数秒の精度の範囲は0から9で、デフォルトは6です。日付範囲は-4712-01-01(紀元前4712年1月1日)から9999-12-31(西暦9999年12月31日)です。TIMESTAMP型では12バイトの記憶域が必要です。TIMESTAMP型は、TT_TIMESTAMPデータ型より日付範囲が広く、TT_TIMESTAMP型より高い精度をサポートしています。
TimesTenでは、ユーザー指定のNLS_TIMESTAMP_FORMAT設定はサポートされていません。SQLのTO_CHARおよびTO_DATE関数を使用すると、その他の書式を指定できます。
TT_DATE値の書式はYYYY-MM-DDで、範囲は1753-01-01(1753年1月1日)から9999-12-31(西暦9999年12月31日)です。TT_DATEデータ型では4バイトの記憶域が必要です。
TT_TIMESTAMP値の書式は、YYYY-MM-DD HH:MI:SS [.FFFFFF]です。 小数秒の精度は6です。範囲は1753-01-01 00:00:00(1753年1月1日の午前0時)から9999-12-31 23:59:59(9999年12月31日の午後11時59分59秒)です。TT_TIMESTAMP型では8バイトの記憶域が必要です。TT_TIMESTAMPは、TIMESTAMPデータ型より高速で、TIMESTAMP型より記憶域サイズが小さくなります。
この項の内容は次のとおりです。
TimesTen型モードを使用している場合、INTERVALの詳細は、TimesTenの以前のリリースのドキュメントを参照してください。
TimesTenの時間隔型は、定数で指定する場合と式の中間結果を表す場合でのみ使用できます。時間隔型を最終結果にすることはできません。列にINTERVAL型を定義することはできません。 「データ型の仕様」を参照してください。
単一フィールドの時間隔リテラルを式に指定することはできますが、時間隔データ型を戻す完全な式は指定できません。
TimesTenでは、次の形式の時間隔リテラルがサポートされています。
INTERVAL [+\-] CharString IntervalQualifier
この項では、DATE、TIME、TIMESTAMPの各データ型の例を示します。
DATEデータ型のdcol
列とTIMEデータ型のtcol
列の両方を含む、sample
という名前の表を作成する構文は、次のとおりです。
CREATE TABLE sample (tcol TIME, dcol DATE);
sample
表にDATEとTIMEの値を挿入する構文は、次のとおりです。
INSERT INTO sample VALUES (TIME '12:00:00', DATE '1998-10-28');
sample
表の、1998年10月29日の正午から午後4時までの行をすべて選択する構文は、次のとおりです。
SELECT * FROM sample WHERE dcol = DATE '1998-10-29' AND tcol BETWEEN TIME '12:00:00' AND TIME '16:00:00';
TIMESTAMPデータ型のtscol
列を含む、sample2
という名前の表を作成して、1998年10月29日の正午から午後4時までの行をすべて選択するには、次の文を使用します。
CREATE TABLE sample2 (tscol TIMESTAMP); INSERT INTO sample2 VALUES (TIMESTAMP '1998-10-28 12:00:00'); SELECT * FROM sample2 WHERE tscol BETWEEN TIMESTAMP '1998-10-29 12:00:00' AND '1998-10-29 16:00:00';
注意: TIME、DATE、TIMESTAMPデータ型については、リテラルと文字列の両方の書式を使用できます。 たとえばTIMEの値は、timestring ('12:00:00') およびtimeliteral (TIME '16:00:00') の両方の書式で指定できます。TimesTenでは、最初の値をCHARとして読み取り、後で必要に応じてTIMEに変換します。2番目の値はTIMEとして読み取ります。前述の例では、リテラル書式を使用しています。 マイクロ秒に満たない端数は、「Data truncated」エラーになります。 |
TimesTenでは、TIMEZONEはサポートされていません。 TIMEおよびTIMESTAMPデータ型の値は、時差を調整せずに保存されます。 このためアプリケーションでは、値をデータベースに送信する前に特定のタイムゾーンを設定して、TIMEおよびTIMESTAMPをそのタイムゾーンの時刻に変換する必要があります。 たとえば、あるアプリケーションでタイムゾーンに太平洋標準時を設定している場合に、太平洋夏時間や東部夏時間または東部標準時のTIMEおよびTIMESTAMPの値を使用するには、アプリケーションでTIMEおよびTIMESTAMPを太平洋標準時に変換する必要があります。
TimesTen型モードを使用している場合、算術演算での日時型および時間隔型の詳細は、TimesTenの以前のリリースのドキュメントを参照してください。
日時型は、DATEデータ型、TIMEデータ型およびTIMESTAMPデータ型を指します。日付および時刻の算術は、次の構文でサポートされています。
TimeVal1 - TimeVal2、TimestampVal1 - TimestampVal2またはDateVal1 - DateVal2: 差をINTERVAL DAY TO SECONDで戻します。
TT_DateVal1 - TT_DateVal2 : 日数の差を整数として戻します。
DateTimeVal {+|-} IntervalVal
IntervalVal + DateTimeVal
IntervalVal1 {+|-} IntervalVal2
IntervalVal {*|/} NumericVal
NumericVal * IntervalVal
INTERVALデータ型は、完結した式の最終結果には使用できません。 この時間隔の結果から必要な要素を抽出するには、EXTRACT関数を使う必要があります。
次の表に、各演算結果のデータ型を示します。
オペランド1 | 演算子 | オペランド2 | 結果のデータ型 |
---|---|---|---|
TIME |
DATE | TIMETAMP |
- | TIME |
DATE | TIMESTAMP |
INTERVAL DAY TO SECOND |
TT_DATE | - | TT_DATE | TT_BIGINT(日数) |
日時 | +または- | INTERVAL | 日時 |
INTERVAL | + |
日時 | 日時 |
INTERVAL | +または- | INTERVAL | INTERVAL |
INTERVAL | *または/ | 数値 | INTERVAL |
数値 | * |
INTERVAL | INTERVAL |
SELECT tt_date1 - tt_date2 FROM t1; SELECT EXTRACT(DAY FROM timestamp1-timestamp2) FROM t1; SELECT * FROM t1 WHERE timestamp1 - timestamp2 = NUMTODSINTERVAL(10, 'DAY'); SELECT SYSDATE + NUMTODSINTERVAL(20,'SECOND') FROM dual; SELECT EXTRACT (SECOND FROM timestamp1-timestamp2) FROM dual; /* select the microsecond difference between two timestamp values d1 and d2 */ SELECT 1000000*(EXTRACT(DAY FROM d1-d2)*24*3600+ EXTRACT(HOUR FROM d1-d2)*3600+ EXTRACT(MINUTE FROM d1-d2)*60+EXTRACT(SECOND FROM d1-d2)) FROM d1;
この例では、2つの列にタイムスタンプの値を挿入してから、EXTRACT関数を使用してそれらの2つの値を減算します。
Command> CREATE TABLE ts (id TIMESTAMP, id2 TIMESTAMP); Command> INSERT INTO ts VALUES (TIMESTAMP '2007-01-20 12:45:23', TIMESTAMP '2006-12-25 17:34:22'); 1 row inserted. Command> SELECT EXTRACT (DAY FROM id - id2) FROM ts; < 25 > 1 row found.
次の問合せでは、エラーが戻されます。 結果がINTERVALとなるSELECT文は実行できません。
SELECT TIMESTAMP1 -TIMESTAMP2 FROM t1; SELECT DATE1 - DATE2 FROM t1;;
INTERVAL YEAR TO MONTHとINTERVAL DAY TO SECONDは比較できません。
SELECT * FROM t1 WHERE timestamp1 - timestamp2 = NUMTOYMINTERVAL(10, 'YEAR');
INTERVAL DAY TO SECONDとINTERVAL DAYは比較できません。
SELECT * FROM t1 WHERE timestamp1 - timdstamp2 = INTERVAL '10' DAY;
INTERVAL DAY TO SECONDからYEARを抽出することはできません。
SELECT EXTRACT (YEAR FROM timestamp1 - timestamp2) FROM dual;
日時および時間隔の算術演算を実行する場合、次の制限を考慮してください。
INTERVAL YEAR、INTERVAL MONTHに対してDATEおよびTIMESTAMP型を使用した加算または減算の結果は終了しません。 たとえば、DATEまたはTIMESTAMPの2004-02-29に1年を追加すると、2005年2月29日は存在しないため(2005年はうるう年ではありません)、日付算術エラー(TimesTenエラー・メッセージ2787)になります。 INTERVALの1月をDATEの2005-01-30に追加すると、2月に30日はないため同じエラーになります。
結果はINTERVAL DAYに対して終了します。
宣言された列の長さが128バイトより大きい可変長の列は表外に保存されます。宣言された列の長さが128バイト以下の可変長の列は、表内に保存されます。文字セマンティクスの場合、表外に保存されるバイトの数はキャラクタ・セットによって異なります。 たとえば、文字ごとに4バイトが必要なキャラクタ・セットでは、宣言された列の長さが32(128/4)より大きい可変長の列は表外に保存されます。
表1-5に、データ型別の記憶域要件を示します。
表1-5 データ型別の記憶域要件
この項では、TimesTenで各データ型の値を比較する方法について説明します。
新しい日付の方が古い日付より大きいとみなされます。 たとえば、'10-AUG-2005'に相当する日付は、'30-AUG-2006'に相当する日付よりも小さく、'30-AUG-2006 1:15pm'は、'30-AUG-2006 10:10am'より大きくなります。
文字値は、次のものを使用して比較されます。
バイナリ・ソートでは、データベース・キャラクタ・セットでの文字の数値コードの連結値に従って文字列が比較されます。キャラクタ・セット内のある文字の数値がもう一方の文字の数値より大きい場合、その文字がもう一方の文字より大きいと判断されます。空白はすべての文字より小さくなります。
言語ソートは、数値コードのバイナリ順序が、比較している文字の言語順序と一致しない場合に役立ちます。言語ソートでは、NLS_SORTによって設定された言語ルールに基づいて、SQLソートおよびSQL比較が行われます。 言語ソートの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の言語ソートに関する説明を参照してください。
デフォルトはバイナリ・ソートです。
空白埋め比較セマンティクスを使用している場合に2つの値の長さが異なると、両方が同じ長さになるまで短い方の値に空白が追加されます。その後、最初の異なる文字が検出されるまで1文字ずつ値が比較されます。この最初の違いが検出された位置で、より大きな文字を持つ値が、大きい方の値とみなされます。2つの値に異なる文字がない場合、これらは同等であるとみなされます。つまり、2つの値の違いが後続の空白の数のみである場合、これらの値は同等であるとみなされます。
空白埋め比較セマンティクスは、比較対象の両方の値がCHAR型またはNCHAR型の式あるいはテキスト・リテラルである場合に使用します。
非空白埋め比較セマンティクスを使用している場合、最初の異なる文字が検出されるまで2つの値が1文字ずつ比較されます。この最初に違いが検出された位置で、より大きな文字を持つ値が、大きい方の値とみなされます。長さが異なる2つの値が短い方の値の最後まで同じである場合は、長い方が大きい値とみなされます。長さが同じ2つの値に異なる文字がない場合、これらは同等であるとみなされます。
非空白埋め比較セマンティクスは、比較対象の両方の値にVARCHAR2型またはNVARCHAR2型が使用されている場合に使用します。
空白埋め比較セマンティクスを使用した場合の例は、次のとおりです。
'a ' = 'a'
非空白埋め比較セマンティクスを使用した場合の例は、次のとおりです。
'a ' > 'a'
通常、1つの式に異なるデータ型の値を使用することはできません。ただし、TimesTenでは、データ型間の暗黙的および明示的な変換の両方がサポートされています。明示的な変換を使用することをお薦めします。
次のルールが適用されます。
正確な数値(TT_TINYINT、TT_SMALLINT、TT_INTEGER、TT_BIGINT、NUMBER)と浮動小数点値(BINARY_FLOAT、BINARY_DOUBLE)間で変換を行うと、不正確になる場合があります。これは、正確な数値では10進数の精度が使用され、浮動小数点数ではバイナリ精度が使用されるためです。
TimesTenでは、文字値を日付、時刻または日時の値と比較すると、文字データが日付、時刻または日時の値に変換されます。
キャラクタ・セットがTIMESTEN8である場合を除いて、CHAR/VARCHAR2とNCHAR/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 Ccnvdemo.c1 = convdemo2.c1; X1, X2, C1, C1 < 10, 10, ABC , ABC > < 100, 100, def , def > 2 rows found.
NULL値は値がないことを示します。NULL値は、存在しない値のプレースホルダとして使用されます。表の列または式のパラメータには、表の作成時に列にNOT NULLを指定していないかぎり、そのデータ型に関係なくNULL値を指定することができます。
NULL値の次のプロパティは、行、パラメータ、ローカル変数の処理に影響します。
GROUP BYまたはSELECT DISTINCTの演算を除き、2つのNULL値は非等価です。
NULL値を含む式は、NULLと評価されます。 たとえば、(5-col)
のcol
がNULLの場合、NULLと評価されます。
これらの属性によって、次のような場合は、NULL値を含む列、行、パラメータが無視されます。
NULL値を含む列を結合して表を結合した場合
集計関数を実行した場合
第4章「検索条件」で説明するSQL条件を使用して、NULL値を明示的にテストできます。 アプリケーションでは、ODBC関数SQLBindCol
、SQLBindParameter
、SQLGetData
、SQLParamData
、またはResultSet.wasNull
とともにJDBC関数PreparedStatement.setNull
およびResultSet.getXXXX
を使用して、NULL値の入出力を処理できます。
TimesTenでは、IEEE浮動小数点値Inf(正の無限大)、-Inf(負の無限大)およびNaN(非数)がサポートされています。
定数値は、浮動小数点定数が許可されている場合に使用できます。次の定数値がサポートされています。
BINARY_FLOAT_INFINITY
-BINARY_FLOAT_INFINITY
BINARY_DOUBLE_INFINITY
-BINARY_DOUBLE_INFINITY
BINARY_FLOAT_NAN
BINARY_DOUBLE_NAN
次の例では、BINARY_FLOAT型の列およびTT_INTEGER型の列を含む表を作成します。BINARY_FLOAT_INFINITYおよびBINARY_FLOAT_NANは、BINARY_FLOAT型の列に挿入されます。
Command> CREATE TABLE bfdemo (id BINARY_FLOAT, Ii2 TT_INTEGER); Command> INSERT INTO bfdemo VALUES (BINARY_FLOAT_INFINITY, 50); 1 row inserted. Command> INSERT INTO bfdemo VALUES (BINARY_FLOAT_NAN, 100); 1 row inserted. Command> SELECT * FROM bfdemo; < INF, 50 > < NAN, 100 > 2 rows found.
Inf、-InfおよびNaNは、主キーで定義された列で使用できる値です。これは、NULLの動作とは異なります。NULL値は、主キーで定義された列では使用できません。
BINARY_FLOAT列およびBINARY_DOUBLE列には、Inf、-InfおよびNaNの値のみ挿入できます。
浮動小数点の条件によって、式が無限大であるか、演算での未定義の結果(NaN(非数))であるかが判別されます。
次のような構文があったとします。
Expression IS [NOT] {NAN| INFINITE}
Expression
は、数値データ型、または数値データ型に暗黙的に変換可能なデータ型に解決される必要があります。
次の表に、浮動小数点の条件を示します。
条件 | 処理 | 例 |
---|---|---|
IS [NOT] NAN | NOTを指定せずExpression が値NaNの場合、TRUEが返されます。NOTを指定してExpression が値NaNでない場合、Trueが返されます。 |
SELECT * FROM bfdemo WHERE id IS NOT NAN; ID, ID2 < INF, 50 > 1 row found. |
IS [NOT] INFINITE | NOTを指定せずExpression が値+INFまたは-INFの場合、TRUEが返されます。NOTを指定してExpression が値+INFまたは-INFでない場合、Trueが返されます。 |
SELECT * FROM bfdemo WHERE id IS NOT INFINITE; ID, ID2 < NAN, 100 > 1 row found. |
注意: 定数キーワードは、特定のBINARY_FLOAT値およびBINARY_DOUBLE値を表します。 比較キーワードは、値のプロパティに対応しており、いずれの型に対しても固有ではありません(ただし、BINARY_FLOAT型、BINARY_DOUBLE型、またはBINARY_FLOATやBINARY_DOUBLEに変換可能な型に対しては、TRUEとしてのみ評価されます)。 |
InfとNaNの比較には、次のルールが適用されます。
Inf(または-Inf)と有限値の間での比較は、想定したとおりの結果になります。たとえば、5 > -Infなどです。
(Inf = Inf)および(Inf > -Inf)は両方ともTRUEと評価されます。
(NaN = NaN)はTRUEと評価されます。
照合順序に関しては次のように適用されます。
-Infは、他のすべての値より低い優先順位でソートされます。
Infは、他のすべての値より高い優先順位でソートされますが、NanおよびNULLより低い優先順位でソートされます。
NaNは、Infより高い優先順位でソートされます。
NULLは、NaNより高い優先順位でソートされます。NULLは、すべての照合順序で常に最大の値となります。
処理の内容によっては、データがオーバーフローするかまたは切り捨てられる場合があります。オーバーフローはエラーになり、Infが生成される場合があります。切り捨ての場合、重要ではないデータが失われます。
INSERTまたはUPDATE文を使用して、正確な値をデータ・ストアに保存する際、目的の列のスケールがその値より小さい場合にかぎり、切捨てが行われます。このような切捨てが行われた場合、警告が戻されます。オーバーフローのため値が収まらない場合は、特別な値Infが戻され、指定した値は挿入されません。
計算時、あるいはデータ・ストアに値を挿入したりデータ・ストアの値を更新する際、近似値が切り捨てられます。値の挿入または更新時にエラーが戻されます。近似値がオーバーフローした場合は、特別な値Infが戻されます。
次のような場合に、オーバーフローが発生します。
算術演算時: 乗算を実行した結果、そのデータ型が許容する最大値を超えた場合、オーバーフローが発生します。 算術演算については、第3章「式」を参照してください。
集計関数の使用時: 複数の値を合計した結果、その結果タイプが許容する最大値を超えた場合、オーバーフローが発生します。 集計関数については、第3章「式」を参照してください。
データ型の変換時: TT_INTEGERの値をTT_SMALLINTの値に変換した場合などにも、オーバーフローが発生する可能性があります。
英数字または数値データ型では、切り捨てによってエラーまたは警告が発生する場合があります。
レプリケートするデータ・ストア内のデータ型のサイズには次の制限があります。
VARCHAR2列およびVARBINARY列は4MBを超えることはできません。 文字長セマンティクスが使用されている場合は、4MBに制限されます。 4MBで表すことができる文字数は、データベースのキャラクタ・セットによって決定されます。 最小文字数は1,000,000/4、つまり250,000文字です。
NVARCHAR2列は、500,000文字(4MB)を超えることはできません。
TimesTenでは、データ型の下位互換モード(TimesTen型モード)がサポートされています。型モードは、データ・ストア作成属性です。TypeMode=1
はTimesTenモードを示します。
型モードの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のTypeModeに関する説明を参照してください。
TimesTen型モードでのデータ型の使用方法の詳細は、TimesTenの以前のリリースのドキュメントを参照してください。
表1-6 TimesTen型モードでサポートされているデータ型
データ型 | 説明 |
---|---|
-9,223,372,036,854,775,808 -(263)から9,223,372,036,854,775,807 (263 - 1)の範囲の符号付き8バイト整数。 かわりに、TT_BIGINTを指定することもできます。 |
|
nバイトの固定長バイナリの値。nに指定できる値は、1から8300です。 BINARYデータは、後続の0(ゼロ)を使用してその列の最大長まで調整されます。 |
|
64ビットの浮動小数点数。BINARY_DOUBLEは倍精度のネイティブの浮動小数点数です。 +Inf、-InfおよびNaNの各値をサポートしています。BINARY_DOUBLEは指数と小数部からなる近似値です。指数またはE表記法を使用できます。BINARY_DOUBLEにはバイナリ精度53が指定されています。 正の最小有限値: 2.22507485850720E-308 正の最大有限値: 1.79769313486231E+308 かわりに、DOUBLE [PRECISION]またはFLOAT [(53)]を指定することもできます。 |
|
32ビットの浮動小数点数。BINARY_FLOATは単精度のネイティブの浮動小数点型です。+Inf、-InfおよびNaNの各値をサポートしています。BINARY_FLOATは指数と小数部からなる近似値です。指数またはE表記法を使用できます。BINARY_FLOATにはバイナリ精度24が指定されています。 正の最小有限値: 1.17549E-38F 正の最大有限値: 3.40282E+38F かわりに、REALまたはFLOAT (24)を指定することもできます。 |
|
長さがnバイトまたはn文字の固定長文字列。デフォルトは1バイトです。 BYTEは、列にバイト長セマンティクスが使用されていることを示します。nに指定できる値は、1バイト以上8300バイト以下です。 CHARは、列に文字長セマンティクスが使用されていることを示します。CHARの最小長は1文字です。最大長は8300バイトに収まる文字数によって異なります。これは使用されているデータベース・キャラクタ・セットによって決まります。キャラクタ・セットがAL32UTF8の場合、1文字当たり最大4バイトが必要になる可能性があるため、CHARの長さは、キャラクタ・セットに応じて2075から8300の範囲に制限されます。 長さが0(ゼロ)の文字列は、NULL以外の有効な値です。CHARのデータは後続の空白を使用してその列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。 かわりに、TT_CHAR [(n [BYTE|CHAR])]を指定することもできます。 |
|
日付情報(世紀、年、月、日)を格納します。書式はYYYY-MM-DDです。MMは整数で表します。 たとえば、2006-10-28と指定します。 記憶域サイズは4バイトです。 有効な日付は、1753-01-01(1753年1月1日)から9999-12-31(9999年12月31日)の間の日付です。 かわりに、TT_DATEを指定することもできます。 |
|
DEC[IMAL][(p[,s])]または NUMERIC[(p[,s])] |
固定の最大精度(総桁数)とスケール(小数点の右側の桁数)を定義した正確な数値。精度pには1から40を指定します。スケールには0からpを指定します。精度のデフォルト値は40、スケールのデフォルト値は0です。 |
TimesTenはINTERVAL型を部分的にサポートします。INTERVAL型は、型INTERVALとIntervalQualifierで表現されます。IntervalQualifierには、精度を持たない単一のフィールド型のみを指定できます。デフォルトの先行精度は、すべてのINTERVAL型で8桁です。単一のフィールド型は、YEAR、MONTH、DAY、HOUR、MINUTE、SECONDのいずれかです。現在、INTERVAL型は定数でのみ指定できます。 |
|
n×2バイトのUnicode文字の固定長文字列です。 必要なバイト数は2×nです。 nは、指定された文字数です。NCHARの文字の制限はバイトの制限の2分の1であるため、最大サイズは4150です。記憶域のデフォルト最小バイト数は2n(2)です。 長さが0(ゼロ)の文字列は、NULL以外の有効な値です。NCHARのデータはU+0020 SPACEを使用してその列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。 かわりに、TT_NCHAR[(n)]を指定することもできます。 NATIONAL CHARACTERおよびNATIONAL CHARは、NCHARのシノニムです。 |
|
–32,768 –(215)から32,767(215–1)の範囲のネイティブの符号付き16ビット整数。 かわりに、TT_SMALLINTを指定することもできます。 |
|
00:00:00(午前0時)から23:59:59(午後11時59分59秒)の間の時刻。書式はHH:MI:SSです。記憶域サイズは8バイトです。 |
|
1753-01-01 00:00:00(1753年1月1日の午前0時)から9999-12-31 23:59:59(9999年12月31日の午後11時59分59秒)の間の日付と時刻。マイクロ秒に満たない端数は、「Data Truncated」エラーになります。書式はYYYY-MM-DD HH:MI:SS [.FFFFFF]です。 記憶域サイズは8バイトです。 かわりに、TT_TIMESTAMPまたは[TT_]TIMESTAMP (6)を指定することもできます。 |
|
0から255(28-1)の範囲の符号なし整数。 TINYINTは符号なしのため、TINYINTを否定するデータ型はSMALLINTになります。 かわりに、TT_TINYINTを指定することもできます。 |
|
–2,147,483,648 –(231)から2,147,483,647(231–1)の範囲の符号付き整数。 かわりに、TT_INTEGERを指定することもできます。 |
|
n×2バイトのUnicode文字の可変長文字列です。 必要なバイト数は2×nです。 nは、指定された文字数です。NVARCHARの文字の制限はバイトの制限の2分の1であるため、最大サイズは2,097,152(221)です。nを指定する必要があります。 長さが0(ゼロ)の文字列は、NULL以外の有効な値です。 空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。 かわりに、TT_NVARCHAR(n)を指定することもできます。 NATIONAL CHARACTER VARYING、NATIONAL CHAR VARYINGおよびNCHAR VARYINGは、NVARCHARのシノニムです。 |
|
最大長がnバイトまたはn文字の可変長文字列。nを指定する必要があります。 BYTEは、列にバイト長セマンティクスが使用されていることを示します。nに指定できる値は、1バイト以上4194304(222)バイト以下です。 CHARは、列に文字長セマンティクスが使用されていることを示します。 長さが0(ゼロ)の文字列は、NULL以外の有効な値です。 空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。 かわりに、TT_VARCHAR (n [BYTE|CHAR])を指定することもできます。 |
|
最大長がnバイトの可変長バイナリの値。nに指定できる値は、1から4194304(222)です。 |
表1-7 TimesTen型モードでサポートされているOracleデータ型
データ型 | 説明 |
---|---|
精度とスケールが指定された数値。精度の範囲は1から38桁です。スケールの範囲は-84から127です。精度とスケールの両方ともオプションです。 精度およびスケールを指定しない場合は、最大精度の38および柔軟なスケールが指定されたとみなされます。 NUMBERは、精度より大きいスケールおよび負のスケールをサポートしています。 NUMBERは、1.0 x 10-130から1.0 x 10126未満の絶対値を含む正と負の固定数値および0(ゼロ)を格納します。値が1.0 x 10126以上の絶対値である算術式を指定すると、エラーが戻されます。 TimesTen型モードのNUMBERデータ型は、最も小さい(最も0に近い)値として10e-89を格納します。 |
|
長さがnバイトまたはn文字の固定長文字列。デフォルトは1バイトです。 BYTEは、列にバイト長セマンティクスが使用されていることを示します。nに指定できる値は、1バイト以上8300バイト以下です。 CHARは、列に文字長セマンティクスが使用されていることを示します。CHARの最小長は1文字です。最大長は8300バイトに収まる文字数によって異なります。これは使用されているデータベース・キャラクタ・セットによって決まります。キャラクタ・セットがAL32UTF8の場合、1文字当たり最大4バイトが必要になる可能性があるため、CHARの長さは、キャラクタ・セットに応じて2075から8300の範囲に制限されます。 長さが0(ゼロ)の文字列は、NULLとして解釈されます。 ORA_CHARのデータは、後続の空白を使用して列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。 |
|
日付と時刻の情報(世紀、年、月、日、時、分、秒)を格納します。 書式はYYYY-MM-DD HHMMSSです。 有効な日付の範囲は紀元前4712年1月1日から西暦9999年12月31日です。 記憶域サイズは7バイトです。小数秒はありません。 |
|
長さがn×2バイトのUnicode文字の固定文字列です。 必要なバイト数は2×nです。 nは、指定された文字数です。NCHARの文字の制限はバイトの制限の2分の1であるため、最大サイズは4150です。記憶域のデフォルト最小バイト数は2n(2)です。 長さが0(ゼロ)の文字列は、NULLとして解釈されます。 ORA_NCHARのデータは、U+0020 SPACEを使用してその列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。 |
|
n×2バイトのUnicode文字の可変長文字列です。 必要なバイト数は2×nです。 nは、指定された文字数です。 ORA_NVARCHAR2の文字の制限はバイトの制限の2分の1であるため、最大サイズは2,097,152(221)です。nを指定する必要があります。 長さが0(ゼロ)の文字列は、NULLとして解釈されます。 非空白埋め比較セマンティクスが使用されます。 空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。 |
|
最大長がnバイトまたはn文字の可変長文字列。 BYTEは、列にバイト長セマンティクスが使用されていることを示します。nに指定できる値は、1バイト以上4194304(222)バイト以下です。nを指定する必要があります。 CHARは、列に文字長セマンティクスが使用されていることを示します。 長さが0(ゼロ)の文字列は、NULLとして解釈されます。 非空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。 |
|
[(fractional_seconds_precision)] |
日付データ型の年、月および日の値に加えて、時、分および秒の時間の値を格納します。Fractional_seconds_precisionは、秒のフィールドの小数部の桁数です。有効な日付の範囲は紀元前4712年1月1日から西暦9999年12月31日です。 小数秒の精度の範囲は0(ゼロ)から9です。デフォルトは6です。書式は次のとおりです。 YYYY-MM-DD HH:MI:SS [.FFFFFFFFF] 記憶域サイズは12バイトです。 |