ヘッダーをスキップ
Oracle® TimesTen In-Memory Database SQLリファレンス
11gリリース(11.2.2)
B66446-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

1 データ型

データ型は値のセットを定義します。データ型の参照は、コンテキストに指定可能な値のセットを指定します。データ型は、表から検索された値、または式や定数に従って計算された値に応じて決まります。

TimesTenでは、ODBC標準に基づいてデータ型が変換されます。詳細は、Microsoft社や様々なサード・パーティから入手できる、ODBC APIリファレンスのドキュメントを参照してください。次のサイトに、Microsoft社のODBC APIリファレンスのドキュメントがあります。

http://msdn.microsoft.com/en-us/library/ms714562(VS.85).aspx

TimesTenキャッシュを使用する場合、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のOracle DatabaseとTimesTenデータ型間のマッピングに関する項を参照してください。この項では、パススルー問合せで行われる型変換およびキャッシュ・グループの列の作成に有効なデータ型を比較します。

次の各項では、TimesTenのデータ型について説明します。

データ型の仕様

TimesTenでは、デフォルトのOracle型モードで表1-1のデータ型がサポートされています。型モードはデータ・ストア属性です。TypeMode=0はOracle型モードを示し、TypeMode=1はTimesTenモードを示します。データ型モードの詳細は、「TimesTen型モード(下位互換モード)」を参照してください。『Oracle TimesTen In-Memory Databaseリファレンス』のTypeModeに関する項も参照してください。

表1-1 Oracle型モードでサポートされているデータ型

データ型 説明

BINARY(n)

nバイトの固定長バイナリの値

nに指定できる値は、1から8300です。BINARYデータは、後続の0(ゼロ)を使用してその列の最大長まで調整されます。かわりに、TT_BINARY(n)を指定することもできます。

詳細は、「BINARYおよびVARBINARYデータ型」を参照してください。

BINARY_DOUBLE

64ビットの浮動小数点数

BINARY_DOUBLEは、+Inf-InfおよびNaN値をサポートする倍精度ネイティブ浮動小数点数です。BINARY_DOUBLEは指数と小数部からなる近似値です。指数またはE表記法を使用できます。BINARY_DOUBLEにはバイナリ精度53が指定されています。

正の最小有限値: 2.22507485850720E-308

正の最大有限値: 1.79769313486231E+308

詳細は、「BINARY_DOUBLE」を参照してください。

BINARY_FLOAT

32ビットの浮動小数点数

BINARY_FLOATは、+Inf-InfおよびNaN値をサポートする単精度ネイティブ浮動小数点型です。BINARY_FLOATは指数と小数部からなる近似値です。指数またはE表記法を使用できます。BINARY_FLOATにはバイナリ精度24が指定されています。

正の最小有限値: 1.17549E-38F

正の最大有限値: 3.40282E+38F

詳細は、「BINARY_FLOAT」を参照してください。

BLOB

バイナリ・ラージ・オブジェクト

最大サイズが16 MBの可変長バイナリの値です。

詳細は、「BLOB」を参照してください。

CHAR[ACTER][(n[BYTE|CHAR])]

長さがnバイトまたはn文字の固定長文字列

デフォルトは1バイトです。

BYTEは、列にバイト長セマンティクスが使用されていることを示します。nに指定できる値は、1バイト以上8300バイト以下です。

CHARは、列に文字長セマンティクスが使用されていることを示します。CHARの最小長は1文字です。最大長は8300バイトに収まる文字数によって異なります。これは使用されているデータベース・キャラクタ・セットによって決まります。キャラクタ・セットがAL32UTF8の場合、1文字当たり最大4バイトが必要になる可能性があるため、CHARの長さは、キャラクタ・セットに応じて2075から8300の範囲に制限されます。

長さが0(ゼロ)の文字列は、NULLとして解釈されます。

CHARのデータは後続の空白を使用してその列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。

かわりに、ORA_CHAR[(n[BYTE|CHAR])]を指定することもできます。

詳細は、「CHAR」を参照してください。

CLOB

シングルバイト・キャラクタまたはマルチバイト・キャラクタを含むキャラクタ・ラージ・オブジェクト

最大サイズが4 MBの可変長ラージ・オブジェクトです。

詳細は、「CLOB」を参照してください。

DATE

日付と時刻の情報(世紀、年、月、日、時、分、秒)

書式は次のとおりです。

YYYY-MM-DD HHMISS

有効な日付の範囲は紀元前4712年1月1日から西暦9999年12月31日です。

小数秒はありません。

かわりに、ORA_DATEを指定することもできます。

詳細は、「DATE」を参照してください。

INTERVAL [+/-] IntervalQualifier

時間隔型

TimesTenでは、型INTERVALIntervalQualifierで表現される時間隔型を部分的にサポートします。IntervalQualifierは、精度を持たない単一フィールド型のみを指定できます。デフォルトの先行精度は、すべての時間隔型で8桁です。単一フィールド型には、年、月、日、時間、分または秒を指定できます。現在、時間隔型に指定できるのは定数のみです。

注意: 時間隔型の列は指定できません。実行時にSQL式で使用される非永続型があります。さらに、時間隔データ型が返される比較では、時間隔データ型を完結した式の最終結果に使用することはできません。この時間隔の結果から必要な要素を抽出するには、EXTRACT関数を使用する必要があります。

詳細は、「TimesTenの時間隔」を参照してください。

NCHAR[(n)]

n×2バイトのUnicode文字の固定長文字列

必要なバイト数は2*nです。ここでnは指定された文字数です。NCHAR文字制限はバイト制限の半分であるため、最大サイズは4150です。

長さが0(ゼロ)の文字列は、NULLとして解釈されます。

NCHARのデータはU+0020 SPACEを使用してその列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。

かわりに、ORA_NCHAR[(n)]を指定することもできます。

詳細は、「NCHAR」を参照してください。

NCLOB

Unicode文字を含む各国語キャラクタ・ラージ・オブジェクト

最大サイズが4 MBの可変長文字値。

詳細は、「NCLOB」を参照してください。

NUMBER[(p [,s])]

精度とスケールが指定された数値

精度の範囲は1から38桁です。スケールの範囲は-84から127です。精度とスケールの両方ともオプションです。

精度およびスケールを指定しない場合は、最大精度の38および柔軟なスケールが指定されたとみなされます。

NUMBERは、負のスケールおよび精度より大きいスケールをサポートしています。

NUMBERは、1.0 x 10-130から1.0 x 10126未満の絶対値を含む正と負の固定数値および0(ゼロ)を格納します。値が1.0 x 10126以上の絶対値である算術式を指定すると、エラーが戻されます。

詳細は、「NUMBER」を参照してください。

NVARCHAR2(n)

n×2バイトのUnicode文字の可変長文字列

必要なバイト数は2*nです。ここでnは指定された文字数です。NVARCHAR2文字制限はバイト制限の半分であるため、最大サイズは2,097,152(221)です。nを指定する必要があります。

長さが0(ゼロ)の文字列は、NULLとして解釈されます。

非空白埋め比較セマンティクスが使用されます。

かわりに、ORA_NVARCHAR2(n)を指定することもできます。

詳細は、「NVARCHAR2」を参照してください。

ROWID

表の行またはマテリアライズド・ビューの行のアドレスを表す18バイトの文字列

リテラルのROWID値は、一重引用符で囲んでCHAR定数として指定してください。

詳細は、「ROWIDデータ型」を参照してください。

TIME

00:00:00(午前0時)から23:59:59(午後11時59分59秒)の間の時刻

書式はHH:MI:SSです。

かわりに、TT_TIMEを指定することもできます。

詳細は、「TIME」を参照してください。

TIMESTAMP

[(fractional_seconds_precision)]

日付の年、月および日の値に加えて、時間の時、分および秒の値

fractional_seconds_precisionは、秒のフィールドの小数部の桁数です。有効な日付の範囲は紀元前4712年1月1日から西暦9999年12月31日です。

TT_TIMESTAMPの記憶域サイズはTIMESTAMPより小さくなります。TT_TIMESTAMPの処理速度はTIMESTAMPより速くなります。これは、TT_TIMESTAMPが1753年1月1日以降のマイクロ秒数を含む8バイトの整数であるためです。比較が非常に速くなります。TIMESTAMPでは紀元前4712年以降の日時データを格納できるため、TIMESTAMPの範囲はTT_TIMESTAMPより大きくなります。また、TIMESTAMPでは最大9桁の小数秒の精度がサポートされ、TT_TIMESTAMPでは6桁の小数秒の精度がサポートされています。

小数秒の精度の範囲は0(ゼロ)から9です。デフォルトは6です。書式は次のとおりです。

YYYY-MM-DD HH:MI:SS [.FFFFFFFFF]

かわりに、ORA_TIMESTAMP[(fractional_seconds_precision)]を指定することもできます。

詳細は、「TIMESTAMP」を参照してください。

TT_BIGINT

-9,223,372,036,854,775,808-(263)から9,223,372,036,854,775,807(263-1)の範囲の符号付き8バイト整数

NUMBERデータ型ではなくTT_BIGINTを使用します。TT_BIGINTは、NUMBER型より小さいサイズで、高速なパフォーマンスを提供します。19桁より大きい整数を格納する必要がある場合は、NUMBER(p)(p > 19)を使用します。

詳細は、「TT_BIGINT」を参照してください。

TT_DATE

日付情報(世紀、年、月、日)

書式はYYYY-MM-DD(MMは2006-10-28のような整数で表される)です。

有効な日付は、1753-01-01(1753年1月1日)から9999-12-31(9999年12月31日)の間の日付です。

詳細は、「TT_DATE」を参照してください。

TT_INTEGER

-2,147,483,648(-231)から2,147,483,647(231-1)の範囲の符号付き整数

TT_INTEGERはネイティブの符号付き整数データ型です。INTEGERではなくTT_INTEGERを使用します。INTEGERNUMBERデータ型にマップされます。TT_INTEGERは、NUMBER型より小さいサイズで、高速なパフォーマンスを提供します。19桁より大きい整数を格納する必要がある場合は、NUMBER(p)(p > 19)を使用します。

詳細は、「TT_INTEGER」を参照してください。

TT_SMALLINT

-32,768(-215)から32,767(215-1)の範囲のネイティブ符号付き16バイト整数

SMALLINTではなくTT_SMALLINTを使用します。SMALLINTNUMBERデータ型にマップされます。

TT_SMALLINTは、NUMBER型より小さいサイズで、高速なパフォーマンスを提供します。19桁より大きい整数を格納する必要がある場合は、NUMBER(p)(p > 19)を使用します。

詳細は、「TT_SMALLINT」を参照してください。

TT_TIMESTAMP

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 [.FFFFFFFFF]です。

TT_TIMESTAMPは、TIMESTAMPより記憶域サイズが小さく、処理速度はTIMESTAMPより速くなります。これは、TT_TIMESTAMPが1753年1月1日以降のマイクロ秒数を含む8バイトの整数であるためです。比較が非常に速くなります。TIMESTAMPでは紀元前4712年以降の日時データを格納できるため、TIMESTAMPの範囲はTT_TIMESTAMPより大きくなります。また、TIMESTAMPでは最大9桁の小数秒の精度がサポートされ、TT_TIMESTAMPでは6桁の小数秒の精度がサポートされています。

TT_TIMESTAMP(6)を指定できます。

詳細は、「TT_TIMESTAMP」を参照してください。

TT_TINYINT

0から255(28-1)の範囲の符号なし整数

NUMBERデータ型ではなくTT_TINYINTを使用します。TT_TINYINTは、NUMBER型より小さいサイズで、高速なパフォーマンスを提供します。19桁より大きい整数を格納する必要がある場合は、NUMBER(p)(p > 19)を使用します。

TT_TINYINTは符号なしのため、TT_TINYINTを否定するデータ型はTT_SMALLINTになります。

詳細は、「TT_TINYINT」を参照してください。

VARBINARY(n)

1から4194304 (222)の範囲の、最大長がnバイトの可変長バイナリの値

かわりに、TT_VARBINARY(n)を指定することもできます。

詳細は、「BINARYおよびVARBINARYデータ型」を参照してください。

VARCHAR[2](n[BYTE|CHAR])

最小1バイトから最大4194304 (222)バイトの範囲の、最大長がnバイトまたはn文字の可変長文字列

nを指定する必要があります。BYTEは、列にバイト長セマンティクスが使用されていることを示します。

CHARは、列に文字長セマンティクスが使用されていることを示します。

長さが0(ゼロ)の文字列は、NULLとして解釈されます。

非空白埋め比較セマンティクスが使用されます。

VARCHAR型は使用しないでください。VARCHAR型は現在VARCHAR2と同じ意味で使用されていますが、再定義される予定です。

かわりに、ORA_VARCHAR2(n[BYTE|CHAR])を指定することもできます。

詳細は、「VARCHAR2」を参照してください。


ANSI SQLデータ型

TimesTenでは、Oracle型モードでANSI SQLデータ型がサポートされています。これらのデータ型は、TimesTenデータ型に変換され、データはTimesTenデータ型として保存されます。表1-2に、ANSI SQLデータ型とTimesTenデータ型とのマッピングを示します。

表1-2 データ型のマッピング: ANSI SQLからTimesTen

ANSI SQLデータ型 TimesTenデータ型

CHARACTER VARYING(n[BYTE|CHAR])または

CHAR VARYING(n[BYTE|CHAR])

VARCHAR2(n[BYTE|CHAR])

文字セマンティクスがサポートされています。

DOUBLE [PRECISION]

NUMBER

バイナリ精度126の浮動小数点数。

かわりに、FLOAT(126)またはORA_FLOAT(126)を指定することもできます。

FLOAT[(b)]

NUMBER

バイナリ精度bを使用する浮動小数点数。bに使用できる値は1から126ビットです。

FLOATは正確な数値型です。FLOATは、浮動スケールおよび指定された精度で列を定義する場合に使用します。NUMBER型では、浮動スケールはサポートされていますが、精度は指定できません。精度が低いと必要な領域も小さくなるため、FLOATを指定できる場合は、NUMBERより適しています。bを指定しない場合、精度はデフォルトで126バイナリ(38桁)になります。

BINARY_FLOATBINARY_DOUBLEは不正確な数値型であるため、FLOATとは浮動型が異なります。さらに、BINARY_FLOATおよびBINARY_DOUBLEはIEEE標準に準拠しているため、FLOATBINARY_FLOAT/BINARY_DOUBLEとではセマンティクスが異なります。

内部的には、FLOATNUMBER型として実装されます。

かわりに、ORA_FLOATを指定することもできます。次に例を示します。

FLOAT(24) = ORA_FLOAT(24)

FLOAT(53) = ORA_FLOAT(53)

FLOAT(n) = ORA_FLOAT(n)

INT[EGER]

NUMBER(38,0)

TT_INTEGERはネイティブの32ビット整数型です。TT_INTEGERNUMBER型と比べてサイズが小さくなり、より高速のパフォーマンスを提供するため、このデータ型を使用します。

NATIONAL CHARACTER(n)または

NATIONAL CHAR(n)

NCHAR(n)

NATIONAL CHARACTER VARYING(n)または

NATIONAL CHAR VARYING(n)または

NCHAR VARYING(n)

NVARCHAR2(n)

NUMERIC[(p[,s])]または

DEC[IMAL][(p[,s])]

NUMBER(p,s)

精度pおよびスケールs.を使用して、固定小数点数を指定します。これは固定小数点数でのみ使用できます。スケールを指定しない場合、sはデフォルトで0(ゼロ)に設定されます。

REAL

NUMBER

バイナリ精度63の浮動小数点数。

かわりに、ORA_FLOAT(63)またはFLOAT(63)を指定することもできます。

SMALLINT

NUMBER(38,0)

TT_SMALLINTはネイティブの符号付き整数データ型です。TT_SMALLINTは、NUMBER型より小さいサイズで、高速なパフォーマンスを提供します。


Oracle型モードでの下位互換用にサポートされている型

TimesTenでは、Oracle型モードでの下位互換用に表1-3のデータ型がサポートされています。

表1-3 Oracle型モードでの下位互換性用にサポートされているデータ型

データ型 説明

TT_CHAR[(n[BYTE|CHAR])]

長さがnバイトまたはn文字の固定長文字列

デフォルトは1バイトです。

BYTEは、列にバイト長セマンティクスが使用されていることを示します。nに指定できる値は、1バイト以上8300バイト以下です。

CHARは、列に文字長セマンティクスが使用されていることを示します。CHARの最小長は1文字です。最大長は8300バイトに収まる文字数によって異なります。これは使用されているデータベース・キャラクタ・セットによって決まります。キャラクタ・セットがAL32UTF8の場合、1文字当たり最大4バイトが必要になる可能性があるため、CHARの長さは、キャラクタ・セットに応じて2075から8300の範囲に制限されます。

長さが0(ゼロ)の空の文字列を列に挿入すると、SQLのNULL値が挿入されます。この処理は、Oracle型モードでのみ有効です。

TT_CHARデータは、後続の空白を使用して列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。

TT_DECIMAL[(p[,s])]

固定の最大精度(総桁数)とスケール(小数点の右側の桁数)を定義した正確な数値

精度pには1から40を指定します。スケールsには0からpを指定します。精度のデフォルト値は40、スケールのデフォルト値は0です。

TT_DECIMALではなく、より高速のパフォーマンスを提供するNUMBERデータ型を使用します。

TT_NCHAR[(n)]

n×2バイトのUnicode文字の固定長文字列

必要なバイト数は2*nです。ここでnは指定された文字数です。NCHAR文字制限はバイト制限の半分であるため、最大サイズは4150です。

長さが0(ゼロ)の空の文字列を列に挿入すると、SQLのNULL値が挿入されます。この処理は、Oracle型モードでのみ有効です。

TT_NCHARデータは、U+0020 SPACEを使用してその列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。

TT_NVARCHAR(n)

n×2バイトのUnicode文字の可変長文字列

必要なバイト数は2*nです。ここでnは指定された文字数です。TT_NVARCHAR文字制限はバイト制限の半分であるため、最大サイズは2,097,152(221)です。nを指定する必要があります。

長さが0(ゼロ)の空の文字列を列に挿入すると、SQLのNULL値が挿入されます。この処理は、Oracle型モードでのみ有効です。

空白埋め比較セマンティクスが使用されます。

TT_VARCHAR(n[BYTE|CHAR])

最大長がnバイトまたはn文字の可変長文字列

nを指定する必要があります。BYTEは、列にバイト長セマンティクスが使用されていることを示します。nに指定できる値は、1バイト以上4194304(222)バイト以下です。

CHARは、列に文字長セマンティクスが使用されていることを示します。

長さが0(ゼロ)の空の文字列を列に挿入すると、SQLのNULL値が挿入されます。この処理は、Oracle型モードでのみ有効です。

空白埋め比較セマンティクスが使用されます。


TimesTen型のマッピング

表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型モードで、このデータ型は同じ名前を使用します。時間隔型の詳細は、「データ型の仕様」を参照してください。

NCHAR[(n)]

TT_NCHAR[(n)]

Oracle型モードでは、TT_CHARを指定します。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型は、固定長文字列を指定します。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以外の有効な値となります。CHARTT_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

NCHARデータ型は、2バイトのUnicode文字の固定長文字列です。NCHARデータ型は、Unicodeの空白文字U+0020 SPACEを使用して指定した長さまで調整されます。空白埋め比較セマンティクスが使用されます。


注意:

NCHAR型を使用すると、長さが0(ゼロ)の文字列はNULLとして解釈されます。TT_NCHAR型を使用すると、長さが0(ゼロ)の文字列は、NULL以外の有効な値となります。NCHARTT_NCHARの両方で、空白埋め比較セマンティクスが使用されます。TT_NCHAR型は下位互換用にサポートされています。

次の例では、表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データ型は、可変長文字列を指定します。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_VARCHARTT_NVARCHARVARCHAR2NVARCHAR2VARBINARY)に適用されます。


注意:

  • VARCHARデータ型は、使用しないでください。VARCHAR2を使用してください。これら2つの型は現在同じ意味で使用されていますが、VARCHARデータ型は、別のセマンティクスを使用する別のデータ型として再定義される可能性があります。

  • VARCHAR2型を使用すると、長さが0(ゼロ)の文字列はNULLとして解釈されます。TT_VARCHAR型を使用すると、長さが0(ゼロ)の文字列は、NULL以外の有効な値となります。VARCHAR2では非空白埋め比較セマンティクスが使用されます。TT_VARCHARでは空白埋め比較セマンティクスが使用されます。TT_VARCHAR型は下位互換用にサポートされています。


次の例では、表typedemoを変更し、列name5name6を追加します。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

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

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データ型で定義され、異なる精度とスケールが指定された列col6col7col8および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; 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.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 *)

BINARY_FLOAT

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

FLOATおよびFLOAT(n)

TimesTenでは、ANSI型FLOATもサポートされます。FLOATは、正確な数値型であり、NUMBER型として実装されます。nの値は、格納できる精度のビット数(1から126)を示します。2進精度から10進精度に変換するには、nに0.30103を乗算します。10進精度から2進精度に変換するには、10進精度に3.32193を乗算します。2進精度の126桁は、10進精度の38桁とほぼ等しくなります。

BINARYデータ型およびVARBINARYデータ型

BINARYデータ型は、長さがnバイトの固定長のバイナリ値(nの値の範囲は1から8300バイト)です。BINARYデータ型にはnバイトの記憶域が必要です。データは後続の0(ゼロ)を使用してその列の最大長まで調整されます。ゼロ埋め比較セマンティクスが使用されます。

VARBINARYデータ型は、最大長がnバイトの可変長のバイナリ値(nの値は1から4,194,304(222)バイト)です。

次の例では表を作成し、2つの列(データ型BINARYで定義されるcol1とデータ型VARBINARYで定義されるcol2)を定義します。次に、各列にバイナリ・データが挿入されます。BINARY値では、右側にゼロが埋め込まれることに注意してください。


注意:

TimesTenで16進リテラルをバイナリ・データとして割り当てる方法の詳細は、「定数」HexadecimalLiteralの説明を参照してください。

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 *)

Command> INSERT INTO bvar (col1, col2)
 > VALUES (0x4D7953514C, 0x39274D);
1 row inserted.

Command> select * from bvar;
 < 4D7953514C0000000000, 39274D >
1 row found.

数値の優先順位

式の結果の型は、型の優先順位が最も高いオペランドにより決定されます。数値の優先順位は次のとおりです(高い順位から低い順位へ)。

  • BINARY_DOUBLE

  • BINARY_FLOAT

  • NUMBER

  • TT_BIGINT

  • TT_INTEGER

  • TT_SMALLINT

  • TT_TINYINT

たとえば、TT_INTEGERBINARY_FLOAT値の合計は、BINARY_FLOATのほうが数値の優先順位が高いため、BINARY_FLOAT型になります。同様に、NUMBERBINARY_DOUBLE値の積はBINARY_DOUBLE型になります。

LOBデータ型

ラージ・オブジェクト(LOB)データ型では、テキスト、イメージ、ビデオ、空間データなどの、サイズの大きい非構造化データを格納できます。LOBには、BLOBCLOBおよびNCLOBデータ型があります。

LOBデータ型の列では、データの挿入や更新を行うことができます。更新操作では、EMPTY_CLOBまたはEMPTY_BLOBを使用してLOB値をNULL、つまり空の値に設定したり、LOB全体を新しいデータに置き換えることができます。別のLOB値でLOB値を更新できます。LOB列が含まれている行を削除すると、LOB値も削除されます。

LOBデータ型のセマンティクスは、次のSQLセマンティクスと似ています。

  • BLOBデータ型はSQL VARBINARYセマンティクスを使用します。

  • CLOBデータ型はSQL VARCHAR2セマンティクスを使用します。

  • NCLOBデータ型はSQL NVARCHAR2セマンティクスを使用します。

次のSQL文、演算子および関数は、1つ以上のLOBデータ型を引数として受け入れます。

  • SQL文: CREATE TABLESELECTINSERTおよびUPDATE

  • 演算子: LIKEおよびIS [NOT] NULL

  • 関数: ASCIISTRCONCATINSTRINSTRBINSTR4LENGTHLENGTHBLOWERLPADNLSSORTNVLTRIMLTRIMRTRIMSUBSTRSUBSTRBSUBSTR4REPLACERPADSOUNDEXTO_DATETO_NUMBERTO_CHARおよびUPPER


注意:

LOBデータ型のサポートの詳細は、前述の文、演算子および関数のドキュメントを参照してください。第6章「SQL文」第5章「検索条件」および第4章「関数」をそれぞれ参照してください。

説明

  • LOB変換SQL関数(TO_BLOBTO_CLOBおよびTO_LOB)は、必要なLOBデータ型への変換を行います。

  • LOB列は常に表外に保存されるため、LOB列の宣言時にはINLINE属性を使用できません。

  • 1つの表内に複数のLOBデータ型の列を定義できます。

  • LOB列で主キーを作成できません。LOB列には、索引(範囲、ハッシュ、ビットマップ)を定義できません。

  • ディテール表にLOB列が含まれている場合は、マテリアライズド・ビューを作成できません。

  • SQLに加えて、PL/SQL、ODBC、JDBC、OCIおよびPRO*C/C++でLOB固有のAPIを使用してLOBを作成および更新できます。これらのAPIの詳細は、該当するTimesTenの開発者ガイドを参照してください。

次の各項では、各LOBデータ型についてさらに詳しく説明します。

さらに、次の各項では、LOB全般に関する詳細情報も示します。

BLOB

バイナリLOB(BLOB)データ型は、構造化されていないバイナリ・ラージ・オブジェクトを格納するために使用します。BLOBデータの最大サイズは16MBです。


注意:

TimesTenで16進リテラルをバイナリ・データとして割り当てる方法の詳細は、「定数」HexadecimalLiteralの説明を参照してください。

列でBLOBを定義する場合、VARBINARYやその他の可変長データ型の場合とは異なり、最大文字数は定義しません。かわりに、この列では次を定義します。

Command> CREATE TABLE blob_content ( 
 > id NUMBER PRIMARY KEY, 
 > blob_column BLOB ); 

BLOBを操作するために、次の関数が提供されます。

  • BLOBを初期化する方法には、空のBLOBを初期化するためのEMPTY_BLOB関数を含む、2つの方法があります。BLOBの初期化の詳細は、「LOBの初期化」を参照してください。空のLOBとNULLのLOBとの違いの詳細は、「NULLのLOBと空のLOBの違い」を参照してください。

  • バイナリ値をBLOBに変換するには、TO_LOBまたはTO_BLOB関数を使用します。詳細は、「TO_BLOB」および「TO_LOB」を参照してください。

CLOB

キャラクタLOB(CLOB)データ型は、シングルバイト・キャラクタ・データおよびマルチバイト・キャラクタ・データを格納するために使用します。CLOBデータの最大サイズは4MBです。CLOBに格納できる最大文字数は、シングルバイト・キャラクタ・セットまたはマルチバイト・キャラクタ・セットのいずれを使用しているかによって異なります。

列でCLOBを定義する場合、VARCHARやその他の可変長データ型の場合とは異なり、最大文字数は定義しません。かわりに、この列では次を定義します。

Command> CREATE TABLE clob_content ( 
 > id NUMBER PRIMARY KEY, 
 > clob_column CLOB ); 

CLOBを操作するために、次の関数が提供されます。

  • CLOBを初期化する方法には、空のCLOBを初期化するためのEMPTY_CLOB関数を含む、2つの方法があります。CLOBの初期化の詳細は、「LOBの初期化」を参照してください。空のLOBとNULLのLOBとの違いの詳細は、後述の「NULLのLOBと空のLOBの違い」を参照してください。

  • 文字列をCLOBに変換するには、TO_LOBまたはTO_CLOB関数を使用します。詳細は、「TO_CLOB」および「TO_LOB」を参照してください。

NCLOB

各国語キャラクタLOB(NCLOB)データ型は、Unicodeデータを格納するために使用します。NCLOBデータの最大サイズは4MBです。

列でNCLOBを定義する場合、VARCHARやその他の可変長データ型の場合とは異なり、最大文字数は定義しません。かわりに、この列では次を定義します。

Command> CREATE TABLE nclob_content ( 
 > id NUMBER PRIMARY KEY, 
 > nclob_column NCLOB ); 

NCLOBデータ型では、次の関数がサポートされます。

  • NCLOBを初期化する方法には、空のNCLOBを初期化するためのEMPTY_CLOB関数を含む、2つの方法があります。NCLOBの初期化の詳細は、「LOBの初期化」を参照してください。空のLOBとNULLのLOBとの違いの詳細は、この直後の「NULLのLOBと空のLOBの違い」を参照してください。

  • 文字列をNCLOBに変換するには、TO_LOBまたはTO_CLOB関数を使用します。詳細は、「TO_CLOB」および「TO_LOB」を参照してください。

NULLのLOBと空のLOBの違い

NULLのLOBは、空のLOBとは意味が異なります。

  • NULLのLOBはNULLの値を持つため、NULLLOBをリクエストするとNULLが返されます。

  • 空のLOBは、EMPTY_CLOBまたはEMPTY_BLOB関数により初期化されます。これらの関数はLOBを初期化して、長さが0(ゼロ)のNULL以外の値にします。EMPTY_CLOBまたはEMPTY_BLOB関数を使用して、NULL値不可列でLOBを初期化することもできます。

LOBの初期化

次の2つの方法のいずれかにより、LOBを初期化できます。

  • EMPTY_BLOBまたはEMPTY_CLOB関数を使用して、BLOBCLOBまたはNCLOB列に空のLOBを挿入できます。これは、データがないが、データの準備用にLOBを作成する場合に役立ちます。NULL値不可のLOB列を初期化する場合にも有用です。

  • データを直接挿入することにより、LOBを初期化します。EMPTY_BLOBまたはEMPTY_CLOB関数を使用してLOBを初期化する必要はなく、単にデータを直接挿入できます。

次に、各タイプの初期化の例を示します。

次の例に示すように、EMPTY_CLOB関数を使用してLOBを初期化できます。

Command> INSERT INTO clob_content (id, clob_column)
       > VALUES (1, EMPTY_CLOB( ) );
1 row inserted.

次の例に示すように、データを直接挿入して、LOBを初期化できます。

Command> INSERT INTO clob_content(id, clob_column)
 > VALUES (4, 'Demonstration of the LOB initialization.');
1 row inserted.

次の例に示すように、UPDATE文を使用して、既存のLOB値を初期化または更新できます。

Command> UPDATE blob_content
 > SET blob_column = 0x000AF4511
 > WHERE id = 1;
1 row updated.

Command> select * from blob_content;
 < 1, 0000AF4511 >
1 rows found.

Command> UPDATE clob_content
 > SET clob_column = 'Demonstration of the CLOB data type '
 > WHERE id = 1;
1 row updated.

Command> SELECT * FROM clob_content;
 < 1, Demonstration of the CLOB data type >

ROWIDデータ型

表またはマテリアライズド・ビューの行のアドレスは、行ID (ROWID)と呼ばれます。行IDのデータ型はROWIDです。ROWIDは、ROWID擬似列を問い合せることで確認できます。ROWID擬似列の詳細は、「ROWID」を参照してください。

SQL文では、リテラルのROWID値は、次のように一重引用符で囲んだ定数として指定してください。

Command> SELECT ROWID, last_name 
> FROM employees 
> WHERE department_id = 20;

< BMUFVUAAACOAAAALhM, Hartstein >
< BMUFVUAAACOAAAAMhM, Fay >
2 rows found.

Command> SELECT ROWID, last_name FROM employees
       > WHERE ROWID='BMUFVUAAACOAAAALhM';
< BMUFVUAAACOAAAALhM, Hartstein >
1 row found.

ROWIDデータ型を次のように使用します。

  • 表の列またはマテリアライズド・ビューの列のデータ型として使用できます。

  • 次のタイプの式で使用できます。

  • ORDER BY句およびGROUP BY句で使用できます。

  • INSERT...SELECT文で使用できます。次の例では、列col1ROWIDデータ型で定義されています。

    Command> DESCRIBE master;
     
    Table MYUSER.MASTER:
      Columns:
       *ID                              ROWID NOT NULL
        NAME                            CHAR (30)
     
    1 table found.
    (primary key columns are indicated with *)
    
    Command> INSERT INTO master(id, name) SELECT ROWID, last_name FROM employees;
    107 rows inserted.
    Command> SELECT * FROM master;
    < BMUFVUAAACOAAAAGhG, King                           >
    < BMUFVUAAACOAAAAHhG, Kochhar                        >
    < BMUFVUAAACOAAAAIhG, De Haan                        >
    ...
    107 rows found.
    

    次に示すように、TO_CHAR関数をROWID擬似列で使用できます。

    Command> INSERT INTO master(id, name) 
    > SELECT TO_CHAR(ROWID), last_name FROM employees;
    107 rows inserted.
    Command> SELECT * FROM master;
    < BMUFVUAAACOAAAAGhG, King                           >
    < BMUFVUAAACOAAAAHhG, Kochhar                        >
    ...
    107 rows found.
    

    次に示すように、CAST関数をROWID擬似列で使用できます。

    Command> CREATE TABLE master (id CHAR(20) NOT NULL PRIMARY KEY, 
    > name CHAR(30));
    Command> INSERT INTO master(id, name) SELECT CAST(ROWID AS CHAR(20)), 
    > last_name from employees;
    107 rows inserted.
    

暗黙的な型変換は、値の割当てと、ROWIDデータとCHARデータ間またはROWIDデータとVARCHAR2データ間の比較処理でサポートされています。

CHARVARCHAR2およびROWIDのオペランドがCOALESCEDECODENVLまたはCASE式(「CASE式」を参照)で組み合せて使用されている場合、結果のデータ型はROWIDになります。CHAR値およびVARCHAR2値を使用した式は、ROWID値に変換されて式が評価されます。

CONCATなどの文字列関数でROWID値を使用するには、アプリケーションでSQL TO_CHAR関数を使用してROWID値を明示的にCHAR値に変換する必要があります。

日時データ型

日時データ型には次のものがあります。

DATE

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関数を使用して、他の形式を指定できます。

TIME

TIME値の書式はHH:MI:SSで、範囲は00:00:00(午前0時)から23:59:59(午後11時59分59秒)です。TIMEデータ型では8バイトの記憶域が必要です。

TIMESTAMP

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より高い精度をサポートします。

TimesTenでは、ユーザー指定のNLS_TIMESTAMP_FORMAT設定はサポートされていません。SQLのTO_CHARおよびTO_DATE関数を使用すると、その他の書式を指定できます。

TT_DATE

TT_DATE値の書式はYYYY-MM-DDで、範囲は1753-01-01(西暦1753年1月1日)から9999-12-31(西暦9999年12月31日)です。TT_DATEデータ型では4バイトの記憶域が必要です。

TT_TIMESTAMP

TT_TIMESTAMP値の書式は、YYYY-MM-DD HH:MI:SS [.FFFFFFFFF]です。小数秒の精度は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データ型より高速で、記憶域サイズが小さくなります。

TimesTenの時間隔

この項の内容は次のとおりです。

時間隔データ型の使用

TimesTen型モードを使用している場合は、時間隔型の詳細について、Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド、リリース6.0.3を参照してください。

TimesTenの時間隔型は、定数で指定する場合または式の中間結果を表す場合でのみ使用できます。時間隔型は最終結果に使用することはできません。列に時間隔型を定義することはできません。「データ型の仕様」を参照してください。

時間隔である単一フィールドのリテラルを式に指定することはできますが、時間隔データ型を戻す完結した式は指定できません。時間隔の結果から必要な要素を抽出するには、かわりにEXTRACT関数を使用する必要があります。

TimesTenでは、次の形式の時間隔リテラルがサポートされています。

INTERVAL [+/-] CharString IntervalQualifier

DATEデータ型およびTIMEデータ型の使用

この項では、DATETIMEおよびTIMESTAMPの各データ型の例を示します。

DATE型のdcol列とTIME型のtcol列を含む、sampleという名前の表を作成するには、次を使用します。

CREATE TABLE sample (tcol TIME, dcol DATE);

sample表にDATETIMEの値を挿入する構文は、次のとおりです。

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';

注意:

TIMEDATEおよび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型モードを使用している場合は、算術演算での日時型および時間隔型の詳細について、Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド、リリース6.0.3を参照してください。

日付、タイムスタンプおよび時間隔データで算術演算を実行できます。TimesTenでは、次のルールに従って結果が計算されます。

  • ORA_DATEまたはORA_TIMESTAMP値に数値を加算、またはそこから数値を減算できます。TimesTenでは内部的にORA_TIMESTAMP値をORA_DATE値に変換します。

  • TT_DATEまたはTT_TIMESTAMP値に数値を加算、またはそこから数値を減算でき、結果として得られる値はそれぞれTT_DATEまたはTT_TIMESTAMPになります。

  • 数値は日数として扱われます。たとえば、SYSDATE + 1は、明日になります。SYSDATE - 7は、1週間前になります。

  • 2つの日付列の減算により、2つの日付間の日数が得られます。戻り型は数値です。

  • 日付値の加算はできません。日付値またはタイムスタンプ値の乗算や除算はできません。

表1-5に、日時の演算処理のマトリックスを示します。ダッシュはサポートされていない操作を表します。このマトリックスでは、Oracle型モードを使用していることが前提になります。

表1-5 DateTime算術演算


DATE TT_DATE TIMESTAMP TT_TIMESTAMP NUMERIC INTERVAL

DATE







+(プラス)





DATE

DATE

-(マイナス)

NUMBER

NUMBER

INTERVAL

INTERVAL

DATE

DATE

*(乗算)







/(除算)







TT_DATE







+(プラス)





TT_DATE

TT_DATE

-(マイナス)

NUMBER

TT_BIGINT

INTERVAL

INTERVAL

TT_DATE

TT_DATE

*(乗算)







/(除算)







TIMESTAMP







+(プラス)





DATE

TIMESTAMP

-(マイナス)

INTERVAL

INTERVAL

INTERVAL

INTERVAL

DATE

TIMESTAMP

*(乗算)







/(除算)







TT_TIMESTAMP







+(プラス)





TT_TIMESTAMP

TT_TIMESTAMP

-(マイナス)

INTERVAL

INTERVAL

INTERVAL

INTERVAL

TT_TIMESTAMP

TT_TIMESTAMP

*(乗算)







/(除算)







NUMERIC







+(プラス)

DATE

TT_DATE

DATE

TT_TIMESTAMP

なし


-(マイナス)





なし


*(乗算)





なし

INTERVAL

/(除算)





なし


INTERVAL







+(プラス)

DATE

TT_DATE

TIMESTAMP

TT_TIMESTAMP


INTERVAL

-(マイナス)






INTERVAL

*(乗算)





INTERVAL


/(除算)





INTERVAL




注意:

時間隔データ型は、完結した式の最終結果に使用することはできません。この時間隔の結果から必要な要素を抽出するには、EXTRACT関数を使用する必要があります。

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つの列にTIMESTAMP値を挿入してから、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;

INTERVAL YEAR TO MONTHINTERVAL DAY TO SECONDは比較できません。

SELECT * FROM t1 WHERE timestamp1 - timestamp2 = NUMTOYMINTERVAL(10, 'YEAR');

INTERVAL DAY TO SECONDINTERVAL DAYは比較できません。

SELECT * FROM t1 WHERE timestamp1 - timestamp2 = INTERVAL '10' DAY;

INTERVAL DAY TO SECONDからYEARを抽出することはできません。

SELECT EXTRACT (YEAR FROM timestamp1 - timestamp2) FROM dual;

日時および時間隔の算術演算の制限

日時および時間隔の算術演算を実行する場合、次の制限を考慮してください。

  • INTERVAL YEARINTERVAL 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に対して終了します。

  • 時間隔データ型は、完結した式の最終結果に使用することはできません。時間隔の結果から必要な要素を抽出するには、EXTRACT関数を使用する必要があります。

記憶域要件

宣言された列の長さが128バイトより大きい可変長の列は表外に保存されます。宣言された列の長さが128バイト以下の可変長の列は、表内に保存されます。すべてのLOBデータ型は表外に保存されます。

文字セマンティクスの場合、表外に保存されるバイトの数はキャラクタ・セットによって異なります。たとえば、文字ごとに4バイトが必要なキャラクタ・セットでは、宣言された列の長さが32(128/4)より大きい可変長の列は表外に保存されます。

表1-6に、データ型別の記憶域要件を示します。

表1-6 データ型別の記憶域要件

データ型 必要な記憶域

BINARY(n)

nバイト

BINARY_DOUBLE

8バイト

BINARY_FLOAT

4バイト

CHAR(n[BYTE|CHAR])

nバイト、または文字セマンティクスを使用する場合はn文字

文字セマンティクスを使用する場合、列長(n)は、長さセマンティクスとキャラクタ・セットに基づきます。

DATE

7バイト

時間隔

TimesTenでは、時間隔型を格納することはできません。

NCHAR(n)

必要なバイト数は2×nです。nは文字数です。

NUMBER

5から22バイト

NVARCHAR2(n)

NOT INLINE列の場合:

32ビット・プラットフォームでは、2×(値の長さ)+20バイト(最小28バイト)。

64ビット・プラットフォームでは、2×(値の長さ)+24バイト(最小40バイト)。

INLINE列の場合:

32ビット・プラットフォームでは、2×(列の長さ)+4バイト。

64ビット・プラットフォームでは、2×(列の長さ)+8バイト。

ROWID

12バイト

TIMESTAMP

12バイト

TT_BIGINT

8バイト

TT_DATE

4バイト

TT_DECIMAL(p,s)

p/2バイト

TT_INT[EGER]

4バイト

TT_SMALLINT

2バイト

TT_TIME

8バイト

TT_TIMESTAMP

8バイト

TT_TINYINT

1バイト

VARBINARY(n)

NOT INLINE列の場合:

32ビット・プラットフォームでは、値の長さ+20バイト(最小28バイト)。

64ビット・プラットフォームでは、値の長さ+24バイト(最小40バイト)。

INLINE列の場合:

32ビット・プラットフォームでは、列の長さ+4バイト。

64ビット・プラットフォームでは、列の長さ+8バイト。

VARCHAR2(n[BYTE|CHAR])

NOT INLINE列の場合:

32ビット・プラットフォームでは、値の長さ+20バイト(最小28バイト)。NULL値は(nullビット)+4バイト、または4.125バイトとして格納されます。

64ビット・プラットフォームでは、値の長さ+24バイト(最小40バイト)。NULL値は(nullビット)+8バイト、または8.125バイトとして格納されます。

この記憶域の原則は、すべての可変長NOT INLINEデータ型(TT_VARCHARTT_NVARCHARVARCHAR2NVARCHAR2およびVARBINARY)に適用されます。

INLINE列の場合:

32ビット・プラットフォームでは、n+4バイト。NULL値は(nullビット)+n+4バイトとして格納されます。

64ビット・プラットフォームでは、n+8バイト。NULL値は(nullビット)+n+8バイトとして格納されます。

文字セマンティクスを使用する場合、列長(n)は、長さセマンティクスとキャラクタ・セットに基づきます。

BLOBおよびCLOB

32ビット・プラットフォームでは、値の長さ+36バイト(最小40バイト)

64ビット・プラットフォームでは、値の長さ+48バイト(最小56バイト)

NCLOB

32ビット・プラットフォームでは、2×(値の長さ)+36バイト(最小40バイト)

64ビット・プラットフォームでは、2×(値の長さ)+48バイト(最小56バイト)


データ型比較ルール

この項では、TimesTenで各データ型の値を比較する方法について説明します。

数値

大きな値は小さな値より大きくなります。-1は10よりも小さく、-10は-1より小さくなります。

浮動小数点値NaNは、他のすべての数値より大きく、NaN自体と同等です。

日付値

新しい日付の方が古い日付より大きいとみなされます。たとえば、'10-AUG-2005'に相当する日付は、'30-AUG-2006'に相当する日付よりも小さく、'30-AUG-2006 1:15 pm'は、'30-AUG-2006 10:10 am'より大きくなります。

文字値

文字値は、次の方法で比較されます。

バイナリ・ソートおよび言語ソート

バイナリ・ソートでは、データベース・キャラクタ・セットでの文字の数値コードの連結値に従って文字列が比較されます。キャラクタ・セット内のある文字の数値がもう一方の文字の数値より大きい場合、その文字がもう一方の文字より大きいと判断されます。空白はすべての文字より小さくなります。

言語ソートは、数値コードのバイナリ順序が、比較している文字の言語順序と一致しない場合に役立ちます。言語ソートでは、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では、データ型間の暗黙的および明示的な変換の両方がサポートされています。暗黙的な変換のアルゴリズムは、ソフトウェア・リリースの変更によって変更されることがあり、明示的な変換を指定しておくと、その動作は将来的にも確実になるため、明示的な変換をお薦めします。

暗黙的なデータ型変換

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

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

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


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-8 暗黙的なデータ型変換(前の表の続き)


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は変更する列のデータ型に値を変換します。

  • キャラクタ・セットがTIMESTEN8である場合を除いて、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.
    

Null値

NULL値は値がないことを示します。これは、存在しない値のプレースホルダとして使用されます。実際のデータ値が不定または値に意味がない場合に、NULLを使用してください。NULLは値0(ゼロ)と同じではないため、0(ゼロ)の数値を表すためにNULL値を使用しないでください。式内のパラメータには、そのデータ型に関係なく、NULLを含めることができます。さらに、表の作成時に列にNOT NULLまたはPRIMARY KEY整合性制約を指定している場合を除き、表内のすべての列にはそのデータ型に関係なくNULLを含めることができます。

NULLの次の特性は、行、パラメータ、ローカル変数の処理に影響します。

  • デフォルトでは、NULLはソートにおいて最も優先順位が高い値としてソートされます。ただし、ORDER BY句でNULLS FIRSTまたはNULLS LASTを使用して、NULLのソート順序値を変更できます。

  • GROUP BYまたはSELECT DISTINCTの演算を除き、2つのNULL値は非等価です。

  • NULLを含む算術式は、NULLに評価されます。実際、オペランドにNULLを指定した場合、(連結演算子を除く)すべての演算子はNULLを戻します。たとえば、(5-col)colNULLの場合、NULLと評価されます。

  • NULLを検査するには、比較条件IS NULLまたはIS NOT NULLを使用します。NULLはデータの欠落を表すため、任意の値や別のNULLとの関係で等号や不等号は成り立ちません。そのため、select * from employees where mgr_id = NULLという文は、このNULLに対する比較を行うことができないため、0(ゼロ)に評価されます。ただし、select * from employees where mgr_id is NULLという文は、会社のCEOを返します。CEOがマネージャを持たない唯一の従業員であるためです。詳細は、「IS NULL条件」を参照してください。

  • NULL値自体は演算子または条件のオペランドとして直接使用できます。たとえば、(1 = NULL)比較がサポートされます。これは、(1 = CAST(NULL AS INT))のように、NULLを適切なデータ型にキャストする場合と同じです。両方の方法がサポートされ、同じ結果を返します。

これらの属性によって、次のような場合は、NULLを含む列、行、パラメータが無視されます。

  • NULLを含む列を結合して表を結合した場合。

  • 集計関数を実行した場合。

第5章「検索条件」で説明するSQL条件を使用して、NULLを明示的にテストできます。TimesTenでサポートされるAPIにより、NULL値を処理する方法が提供されます。たとえば、ODBCアプリケーションで、関数SQLBindColSQLBindParameterSQLGetDataおよびSQLParamDataを使用して、NULL値の入出力を処理します。

INFおよびNAN

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とは異なります。

BINARY_FLOAT列およびBINARY_DOUBLE列には、Inf-InfおよびNaNの値のみ挿入できます。

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_FLOATBINARY_DOUBLEに変換可能な型に対しては、TRUEとしてのみ評価されます)。

InfNaNの比較には、次のルールが適用されます。

  • Inf(または-Inf)と有限値の間での比較は、想定したとおりの結果になります。たとえば、5 > -Infなどです。

  • (Inf = Inf)および(Inf > -Inf)は両方ともTRUEと評価されます。

  • (NaN = NaN)TRUEと評価されます。

照合順序に関しては次のように適用されます。

  • -Infは、他のすべての値より低い優先順位でソートされます。

  • Infは、NaNおよびNULLより低い優先順位でソートされ、他のすべての値よりは高い優先順位でソートされます。

  • NaNは、Infより高い優先順位でソートされます。

  • NULLは、NaNより高い優先順位でソートされます。NULLは、すべての照合順序で常に最大の値となります。

InfおよびNaNを含む式

  • 浮動小数点値を含む式では、Inf-InfまたはNaNが生成される場合があります。これらの値は、式でオーバーフローまたは例外状態が生成された場合、あるいは式内の1つ以上の値がInf-InfまたはNaNの場合に生成される可能性があります。InfおよびNaNは、オーバーフローまたは0(ゼロ)による除算が条件の場合に生成されます。

  • 集計関数では、Inf-InfおよびNaNの値は無視されません。NULL値は無視されます。集計(または任意のSELECTの結果)からInfおよびNaNを除外する場合は、IS NOT NAN条件およびIS NOT INFINITE条件の両方を使用します。

オーバーフローと切捨て

処理の内容によっては、データがオーバーフローするかまたは切り捨てられる場合があります。オーバーフローはエラーになり、Infが生成される場合があります。切り捨ての場合、重要ではないデータが失われます。

INSERTまたはUPDATE文を使用して、正確な値をデータベースに保存する際、目的の列のスケールがその値より小さい場合にかぎり、切捨てが行われます。このような切捨てが行われた場合、警告が戻されます。オーバーフローのため値が収まらない場合は、特別な値Infが戻され、指定した値は挿入されません。

TimesTenでは、計算中、値がデータベースに挿入されるとき、またはデータベースの値が更新されるときに、近似値の切捨てを行うことがあります。INSERTまたはUPDATEに対してのみエラーが戻されます。近似値がオーバーフローした場合は、特別な値Infが戻されます。

次のような場合に、オーバーフローが発生します。

  • 算術演算時、積算の結果の値がその型で使用できる最大値より大きい場合に、オーバーフローが発生することがあります。算術演算は、第3章「式」で定義されています。

  • 集計関数の使用時に、複数の数値の合計が結果の型で使用できる最大値を超えると、オーバーフローが発生することがあります。集計関数は第3章「式」で定義されています。

  • 型変換時に、たとえばTT_INTEGER値がTT_SMALLINT値に変換されると、オーバーフローが発生することがあります。

次のように、英数字または数値データ型では、切捨てによってエラーまたは警告が発生する場合があります。

  • 文字データで、文字列がターゲット型には長すぎるために切り捨てられると、エラーが発生します。NCHAR型およびNVARCHAR2型では、Unicode文字境界で常に切捨てが行われます。NCHARデータ型では、シングルバイト値(Unicode文字の半分)には意味がなく、使用できません。

  • 数値データで、数値の小数部から後続の0(ゼロ)以外の数字が削除されると、警告が発生します。

アンダーフロー

近似値が、ハードウェアで表現できないほど0(ゼロ)に近似する場合、アンダーフローが発生して0(ゼロ)になり、切捨ての警告が戻されます。

レプリケーションの制限

レプリケートするデータベース内のデータ型のサイズには次の制限があります。

  • VARCHAR2およびVARBINARY列は4MBを超えることはできません。文字長セマンティクスが使用されている場合は、4MBに制限されます。4MBで表すことができる文字数は、データベースのキャラクタ・セットによって決定されます。最小文字数は1,000,000/4、つまり250,000文字です。

  • NVARCHAR2列は、500,000文字(4MB)を超えることはできません。

TimesTen型モード(下位互換モード)

TimesTenでは、データ型の下位互換モード(TimesTen型モード)がサポートされています。これはデータ・ストア作成属性TypeModeを使用して指定され、TypeMode=1はTimesTenモードを示します。型モードにより、デフォルトのデータ型が決まります。たとえば、TimesTen型モードのDATEのデフォルトはTT_DATEであり、Oracle型モードのDATEのデフォルトはORA_DATEです。

型モードの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』の「TypeMode」を参照してください。TimesTen型モードでのデータ型の使用法の詳細は、Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド、リリース6.0.3を参照してください。

TimesTen型モードでサポートされているデータ型

表1-9 TimesTen型モードでサポートされているデータ型

データ型 説明

BIGINT

-9,223,372,036,854,775,808-(263)から9,223,372,036,854,775,807(263-1)の範囲の符号付き8バイト整数

かわりに、TT_BIGINTを指定することもできます。

BINARY(n)

nバイトの固定長バイナリの値。nに指定できる値は、1から8300です。

BINARYデータは、後続の0(ゼロ)を使用してその列の最大長まで調整されます。

BINARY_DOUBLE

64ビットの浮動小数点数

BINARY_DOUBLEは倍精度のネイティブの浮動小数点数です。+Inf-InfおよびNaNの各値をサポートしています。BINARY_DOUBLEは指数と小数部からなる近似値です。指数またはE表記法を使用できます。BINARY_DOUBLEにはバイナリ精度53が指定されています。

正の最小有限値: 2.22507485850720E-308

正の最大有限値: 1.79769313486231E+308

かわりに、DOUBLE [PRECISION]またはFLOAT[(53)]を指定することもできます。

BINARY_FLOAT

32ビットの浮動小数点数

BINARY_FLOATは単精度のネイティブの浮動小数点型です。+Inf-InfおよびNaNの各値をサポートしています。BINARY_FLOATは指数と小数部からなる近似値です。指数またはE表記法を使用できます。BINARY_FLOATにはバイナリ精度24が指定されています。

正の最小有限値: 1.17549E-38F

正の最大有限値: 3.40282E+38F

かわりに、REALまたはFLOAT(24)を指定することもできます。

CHAR[ACTER][(n [BYTE|CHAR])]

長さがnバイトまたはn文字の固定長文字列

デフォルトは1バイトです。

BYTEは、列にバイト長セマンティクスが使用されていることを示します。nバイトに指定できる値は、1から8300です。

CHARは、列に文字長セマンティクスが使用されていることを示します。CHARの最小長は1文字です。最大長は8300バイトに収まる文字数によって異なります。これは使用されているデータベース・キャラクタ・セットによって決まります。キャラクタ・セットがAL32UTF8の場合、1文字当たり最大4バイトが必要になる可能性があるため、CHARの長さは、キャラクタ・セットに応じて2075から8300の範囲に制限されます。

長さが0(ゼロ)の文字列は、NULL以外の有効な値です。文字列値""は長さが0(ゼロ)の空の文字列ですが、NULL値ではありません。ただし、PL/SQLでは、長さが0(ゼロ)の文字列は常にNULLとみなされます。そのため、PL/SQLを使用する場合、SQL内のすべての空の文字列パラメータは、TimesTenデータベースに値が渡される前に、PL/SQLによってNULLに変換されます。

CHARのデータは後続の空白を使用してその列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。

かわりに、TT_CHAR[(n [BYTE|CHAR])]を指定することもできます。

DATE

日付情報(世紀、年、月、日)

書式は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を指定します。スケールsの値には0からpを指定します。精度のデフォルト値は40、スケールのデフォルト値は0です。

INTERVAL [+/-] IntervalQualifier

時間隔

TimesTenでは、INTERVALIntervalQualifierで表現される時間隔型を部分的にサポートします。IntervalQualifierは、精度を持たない単一フィールド型のみを指定できます。デフォルトの先行精度は、すべての時間隔型で8桁です。単一フィールド型には、YEARMONTHDAYHOURMINUTEまたはSECONDのいずれかを指定できます。現在、時間隔型に指定できるのは定数のみです。

NCHAR[(n)]

n×2バイトのUnicode文字の固定長文字列

必要なバイト数は2*nです。ここでnは指定された文字数です。NCHAR文字制限はバイト制限の半分であるため、最大サイズは4150です。記憶域のデフォルトおよび最小バイト数は2n(2)です。

長さが0(ゼロ)の文字列は、NULL以外の有効な値です。文字列値""は長さが0(ゼロ)の空の文字列ですが、NULL値ではありません。ただし、PL/SQLでは、長さが0(ゼロ)の文字列は常にNULLとみなされます。そのため、PL/SQLを使用する場合、SQL内のすべての空の文字列パラメータは、TimesTenデータベースに値が渡される前に、PL/SQLによってNULLに変換されます。

NCHARのデータはU+0020 SPACEを使用してその列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。

かわりに、TT_NCHAR[(n)]を指定することもできます。

NATIONAL CHARACTERおよびNATIONAL CHARは、NCHARのシノニムです。

SMALLINT

-32,768(-215)から32,767(215-1)の範囲のネイティブ符号付き16バイト整数

かわりに、TT_SMALLINTを指定することもできます。

TIME

00:00:00(午前0時)から23:59:59(午後11時59分59秒)の間の時刻

書式はHH:MI:SSです。記憶域サイズは8バイトです。

TIMESTAMP

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 [.FFFFFFFFF]です。

記憶域サイズは8バイトです。

かわりに、TT_TIMESTAMPまたは[TT_]TIMESTAMP(6)を指定することもできます。

TINYINT

0から255(28-1)の範囲の符号なし整数

TINYINTは符号なしのため、TINYINTを否定するデータ型はSMALLINTになります。

かわりに、TT_TINYINTを指定することもできます。

INT[EGER]

-2,147,483,648(-231)から2,147,483,647(231-1)の範囲の符号付き整数

かわりに、TT_INTEGERを指定することもできます。

NVARCHAR(n)

n×2バイトのUnicode文字の可変長文字列

必要なバイト数は2*nです。ここでnは指定された文字数です。NVARCHAR文字制限はバイト制限の半分であるため、最大サイズは2,097,152(221)です。nを指定する必要があります。

長さが0(ゼロ)の文字列は、NULL以外の有効な値です。文字列値""は長さが0(ゼロ)の空の文字列ですが、NULL値ではありません。ただし、PL/SQLでは、長さが0(ゼロ)の文字列は常にNULLとみなされます。そのため、PL/SQLを使用する場合、SQL内のすべての空の文字列パラメータは、TimesTenデータベースに値が渡される前に、PL/SQLによってNULLに変換されます。

空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。

かわりに、TT_NVARCHAR(n)を指定することもできます。

NATIONAL CHARACTER VARYINGNATIONAL CHAR VARYINGおよびNCHAR VARYINGは、NVARCHARのシノニムです。

VARCHAR(n[BYTE|CHAR])

最大長がnバイトまたはn文字の可変長文字列。nを指定する必要があります。

BYTEは、列にバイト長セマンティクスが使用されていることを示します。nバイトに指定できる値は、1から4194304(222)です。

CHARは、列に文字長セマンティクスが使用されていることを示します。

長さが0(ゼロ)の文字列は、NULL以外の有効な値です。文字列値""は長さが0(ゼロ)の空の文字列ですが、NULL値ではありません。ただし、PL/SQLでは、長さが0(ゼロ)の文字列は常にNULLとみなされます。そのため、PL/SQLを使用する場合、SQL内のすべての空の文字列パラメータは、TimesTenデータベースに値が渡される前に、PL/SQLによってNULLに変換されます。

空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。

かわりに、TT_VARCHAR(n[BYTE|CHAR])を指定することもできます。

VARBINARY(n)

最大長がnバイトの可変長バイナリの値

nに指定できる値は、1から4194304(222)です。


TimesTen型モードでサポートされているOracleデータ型

表1-10 TimesTen型モードでサポートされているOracleデータ型

データ型 説明

NUMBER[(p [,s])]

精度とスケールが指定された数値

精度値の範囲は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を格納します。

ORA_CHAR[(n [BYTE|CHAR])]

長さがnバイトまたはn文字の固定長文字列

デフォルトは1バイトです。

BYTEは、列にバイト長セマンティクスが使用されていることを示します。nバイトに指定できる値は、1から8300です。

CHARは、列に文字長セマンティクスが使用されていることを示します。CHARの最小長は1文字です。最大長は8300バイトに収まる文字数によって異なります。これは使用されているデータベース・キャラクタ・セットによって決まります。キャラクタ・セットがAL32UTF8の場合、1文字当たり最大4バイトが必要になる可能性があるため、CHARの長さは、キャラクタ・セットに応じて2075から8300の範囲に制限されます。

長さが0(ゼロ)の文字列は、NULL以外の有効な値です。文字列値""は長さが0(ゼロ)の空の文字列ですが、NULL値ではありません。ただし、PL/SQLでは、長さが0(ゼロ)の文字列は常にNULLとみなされます。そのため、PL/SQLを使用する場合、SQL内のすべての空の文字列パラメータは、TimesTenデータベースに値が渡される前に、PL/SQLによってNULLに変換されます。

ORA_CHARのデータは、後続の空白を使用して列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。

ORA_DATE

日付と時刻の情報(世紀、年、月、日、時、分、秒)

書式はYYYY-MM-DD HHMISSです。

有効な日付の範囲は紀元前4712年1月1日から西暦9999年12月31日です。

記憶域サイズは7バイトです。小数秒はありません。

ORA_NCHAR[(n)]

長さがn×2バイトのUnicode文字の固定長文字列

必要なバイト数は2*nです。ここでnは指定された文字数です。NCHAR文字制限はバイト制限の半分であるため、最大サイズは4150です。記憶域のデフォルトおよび最小バイト数は2n(2)です。

長さが0(ゼロ)の文字列は、NULL以外の有効な値です。文字列値""は長さが0(ゼロ)の空の文字列ですが、NULL値ではありません。ただし、PL/SQLでは、長さが0(ゼロ)の文字列は常にNULLとみなされます。そのため、PL/SQLを使用する場合、SQL内のすべての空の文字列パラメータは、TimesTenデータベースに値が渡される前に、PL/SQLによってNULLに変換されます。

ORA_NCHARのデータは、U+0020 SPACEを使用してその列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。

ORA_NVARCHAR2(n)

n×2バイトのUnicode文字の可変長文字列

必要なバイト数は2*nです。ここでnは指定された文字数です。ORA_NVARCHAR2文字制限はバイト制限の半分であるため、最大サイズは2,097,152(221)です。nを指定する必要があります。

長さが0(ゼロ)の文字列は、NULL以外の有効な値です。文字列値""は長さが0(ゼロ)の空の文字列ですが、NULL値ではありません。ただし、PL/SQLでは、長さが0(ゼロ)の文字列は常にNULLとみなされます。そのため、PL/SQLを使用する場合、SQL内のすべての空の文字列パラメータは、TimesTenデータベースに値が渡される前に、PL/SQLによってNULLに変換されます。

非空白埋め比較セマンティクスが使用されます。

空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。

ORA_VARCHAR2(n[BYTE|CHAR])

最大長がnバイトまたはn文字の可変長文字列

BYTEは、列にバイト長セマンティクスが使用されていることを示します。nバイトに指定できる値は、1から4194304(222)です。nを指定する必要があります。

CHARは、列に文字長セマンティクスが使用されていることを示します。

長さが0(ゼロ)の文字列は、NULL以外の有効な値です。文字列値""は長さが0(ゼロ)の空の文字列ですが、NULL値ではありません。ただし、PL/SQLでは、長さが0(ゼロ)の文字列は常にNULLとみなされます。そのため、PL/SQLを使用する場合、SQL内のすべての空の文字列パラメータは、TimesTenデータベースに値が渡される前に、PL/SQLによってNULLに変換されます。

非空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。

ORA_TIMESTAMP

[(fractional_seconds_precision)]

日付データ型の年、月および日の値に加えて、時間の時、分および秒の値

Fractional_seconds_precisionは、秒のフィールドの小数部の桁数です。有効な日付の範囲は紀元前4712年1月1日から西暦9999年12月31日です。

小数秒の精度の範囲は0(ゼロ)から9です。デフォルトは6です。書式は次のとおりです。

YYYY-MM-DD HH:MI:SS [.FFFFFFFFF]

記憶域サイズは12バイトです。