Oracle Databaseが処理する値は、それぞれデータ型を持ちます。値のデータ型は、固定されたプロパティの集合をその値に対応付けます。このプロパティに応じて、Oracleは、あるデータ型の値を別のデータ型の値と区別して扱います。たとえば、NUMBER
データ型の値は加算できますが、RAW
データ型の値は加算できません。
表またはクラスタを作成する場合、各列にデータ型を指定する必要があります。プロシージャまたはストアド・ファンクションを作成する場合は、その各引数にデータ型を指定する必要があります。データ型によって、各列が含むことができる値のドメイン、または各引数が持つことができる値のドメインが決まります。たとえば、DATE
列は、2月29日(うるう年を除く)、2または'SHOE'という値を格納できません。列に入る値は、その列のデータ型を受け継ぎます。たとえば、DATE
列に'01-JAN-98'
を挿入すると、Oracleはそれが有効な日付に変換されることを確認してから、文字列'01-JAN-98'
をDATE
値として扱います。
Oracle Databaseには、多くの組込みデータ型、およびデータ型として使用できるいくつかのユーザー定義型のカテゴリがあります。Oracleのデータ型の構文については、次の構文図で示します。この項は、次の6つの項にわかれています。
データ型はスカラーまたは非スカラーです。スカラー型は、アトム値を持ちますが、非スカラー型(コレクションともいう)は一連の値を持ちます。ラージ・オブジェクト(LOB)は、スカラー型の特別な形で、バイナリまたは文字データのラージ・スカラー値を表しています。LOBはサイズが大きいため、他のスカラー型には影響しないいくつかの制限事項があります。これらの制限事項については、関連するSQL構文を参照してください。
Oracleプリコンパイラによって、埋込みSQLプログラムで他のデータ型が区別されます。このようなデータ型は、外部データ型と呼ばれ、ホスト変数に対応付けられています。組込みデータ型およびユーザー定義型を外部データ型と混同しないでください。Oracleによる外部データ型と組込み型またはユーザー定義データ型の間の変換など、外部データ型の詳細は、『Pro*COBOLプログラマーズ・ガイド』および『Pro*C/C++プログラマーズ・ガイド』を参照してください。
datatypes::=
次の図に、Oracleの組込みデータ型について示します。詳細は、「Oracleの組込みデータ型」を参照してください。
Oracle_built_in_datatypes::=
character_datatypes::=
number_datatypes::=
long_and_raw_datatypes::=
datetime_datatypes::=
large_object_datatypes::=
rowid_datatypes::=
次に、ANSIがサポートしているデータ型について示します。また、「ANSI、DB2、SQL/DSのデータ型」に、ANSIがサポートしているデータ型をOracle組込みデータ型にマップする方法を示します。
ユーザー定義型の詳細は、「ユーザー定義型」を参照してください。
次の図に、Oracleが提供するデータ型について示します。詳細は、「Oracleが提供する型」を参照してください。
Oracle_supplied_types::=
any_types::=
任意
型の詳細は、「任意型」を参照してください。
XML_types::=
XML型の詳細は、「XML型」を参照してください。
spatial_types::=
Spatial型の詳細は、「Spatial型」を参照してください。
media_types::=
still_image_object_types::=
メディア型の詳細は、「メディア型」を参照してください。
次の表にOracle組込みデータ型の概要を示します。構文要素については、前の項の構文を参照してください。データ型のコードは、Oracle Databaseが内部的に使用します。DUMP
ファンクションによって、列またはオブジェクト属性のデータ型コードが戻されます。
表2-1 組込みデータ型の概要
コード | データ型 | 説明 |
---|---|---|
1 |
|
最大長が
|
1 |
|
最大長が
|
2 |
|
精度 |
2 |
|
精度 |
8 |
|
最大2GB(231から1を引いたバイト数)の可変長文字データ。下位互換性のために提供されています。 |
12 |
|
紀元前4712年1月1日から紀元9999年12月31日までの日付を指定します。デフォルトの書式は、 |
100 |
|
32ビットの浮動小数点数。このデータ型には4バイトが必要です。 |
101 |
|
64ビットの浮動小数点数。このデータ型には8バイトが必要です。 |
180 |
|
日付の年、月、日および時刻の時、分、秒の値。 |
181 |
|
タイムゾーンによる時差などのすべての |
231 |
|
デフォルトの書式は、 |
182 |
|
年および月で期間を格納。 |
183 |
|
日、時、分および秒で期間を格納。
サイズは11バイトに固定されています。 |
23 |
|
長さ
|
24 |
|
最大2GBの可変長バイナリ・データ。 |
69 |
|
表の行のアドレスを一意に表すBASE64文字列。主に、 |
208 |
|
索引構成表の行の論理アドレスを表すBASE64文字列。オプションの |
96 |
|
長さ
|
96 |
|
長さ |
112 |
|
シングルバイト文字またはマルチバイト・キャラクタを含むキャラクタ・ラージ・オブジェクト。固定幅および可変幅のキャラクタ・セットがサポートされ、両方ともデータベース・キャラクタ・セットで使用されます。最大サイズは、4GBから1を引いたバイト数にデータベース・ブロック・サイズを掛けた値です。 |
112 |
|
Unicodeキャラクタを含むキャラクタ・ラージ・オブジェクト。固定幅および可変幅のキャラクタ・セットがサポートされます。両方のキャラクタ・セットでデータベースの各国語キャラクタ・セットを使用します。最大サイズは、4GBから1を引いたバイト数にデータベース・ブロック・サイズを掛けた値です。各国語キャラクタ・セットのデータを格納します。 |
113 |
|
バイナリ・ラージ・オブジェクト。最大サイズは、4GBから1を引いたバイト数にデータベース・ブロック・サイズを掛けた値です。 |
114 |
|
データベース外に保存された大きなバイナリ・ファイルへロケータを格納。データベース・サーバー上に存在する外部LOBへのバイト・ストリームI/Oアクセスを可能にします。最大サイズは4GBです。 |
次の項では、Oracle Databaseに格納されるOracleデータ型について説明します。これらのデータ型をリテラルとして指定する方法については、「リテラル」を参照してください。
文字データ型を使用すると、単語や自由形式のテキストなど、データベース・キャラクタ・セットまたは各国語キャラクタ・セットの文字(英数字)を格納できます。文字データ型は、他のデータ型より制限が少ないため、プロパティも少なくなります。たとえば、文字データ型の列は、すべての英数字の値を格納できますが、NUMBER
型の列が格納できるのは数値のみです。
文字データは、7ビットASCIIやEBCDICなど、データベース作成時に指定されたキャラクタ・セットの1つに対応しているバイト値で文字列に格納されます。Oracle Databaseは、シングルバイトのキャラクタ・セットとマルチバイトのキャラクタ・セットの両方をサポートします。
次のデータ型が、文字データに対して使用されます。
文字データ型をリテラルとして指定する方法については、「テキスト・リテラル」を参照してください。
CHAR
データ型は、データベース・キャラクタ・セットの固定長の文字列を指定します。データベースの作成時には、データベース・キャラクタ・セットを指定します。
CHAR
の列を含む表の作成時には、size
として列長を指定し、その後にオプションで長さの修飾子を指定します。修飾子BYTE
はバイト長セマンティクスを表し、修飾子CHAR
は文字長セマンティクスを表します。バイト長セマンティクスでは、size
は列に格納するバイト数です。文字長セマンティクスでは、size
は列に格納するデータベース・キャラクタ・セットのコード・ポイント数です。コード・ポイントは、データベース・キャラクタ・セットおよびコード・ポイントによってエンコードされた特定の文字に応じて1から4バイトです。いずれかの長さ修飾子を指定して、列の目的の長さセマンティクスを明示的に指定することをお薦めします。修飾子を指定しない場合は、列を作成しているセッションのNLS_LENGTH_SEMANTICS
パラメータの値によって長さセマンティクスが定義されますが、デフォルト・セマンティクスがBYTE
であるスキーマSYS
に表が属している場合を除きます。
Oracleでは、CHAR
列に格納されているすべての値は、選択した長さセマンティクスのsize
によって指定された長さになります。列の長さより短い値を挿入すると、列の長さにあわせるため、その値の後に空白が埋め込まれます。列に対して長すぎる値を挿入しようとすると、Oracleはエラーを戻します。列長が文字(コード・ポイント)で表現されている場合、空白埋めでは、すべての列値が同じバイト長であることは保証されません。
size
は列定義から省略できます。デフォルト値は1です。
size
の最大値は2000で、選択した長さセマンティクスに応じて2000バイトまたは文字(コード・ポイント)を意味します。ただし、これとは関係なく、CHAR
列に格納できる文字値の絶対最大長は2000バイトです。たとえば、列長を2000文字に定義した場合でも、1つ以上のコード・ポイントの幅が1バイトより大きい2000文字の値を挿入しようとすると、エラーが戻されます。文字のsize
の値は長さの制約であり、容量を保証するものではありません。CHAR
列に常にデータベース・キャラクタ・セットのsize
文字を格納できるようにするには、500以下のsize
の値を使用します。
異なるキャラクタ・セットを持つデータベースおよびクライアント間で適切にデータを変換するには、CHAR
データが正しい書式の文字列で構成されていることを確認してください。
関連項目: キャラクタ・セット・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。比較セマンティクスについては、「データ型の比較規則」を参照してください。 |
NCHAR
データ型は、各国語キャラクタ・セットの固定長の文字列を指定します。データベースの作成時に、各国語キャラクタ・セットをAL16UTF16またはUTF8として指定します。AL16UTF16およびUTF8は、Unicodeキャラクタ・セットの2つのエンコード方式(それぞれUTF-16およびCESU-8)であるため、NCHAR
はUnicodeのみのデータ型です。
NCHAR
列を使用して表を作成するときは、列長をsize
文字として指定するか、より正確に各国語キャラクタ・セットのコード・ポイントとして指定します。1つのコード・ポイントは、コード・ポイントによってエンコードされた特定の文字に応じて、AL16UTF16では常に2バイト、UTF8では1から3バイトです。
Oracleでは、NCHAR
列に格納されているすべての値は、size
文字の長さになります。列の長さより短い値を挿入すると、列の長さにあわせるため、その値の後に空白が埋め込まれます。列に対して長すぎる値を挿入しようとすると、Oracleはエラーを戻します。各国語キャラクタ・セットがUTF8の場合、空白埋めでは、すべての列値が同じバイト長であることは保証されません。
size
は列定義から省略できます。デフォルト値は1です。
size
の最大値は、各国語キャラクタ・セットがAL16UTF16の場合は1000文字、UTF8の場合は2000文字です。ただし、これとは関係なく、NCHAR
列に格納できる文字値の絶対最大長は2000バイトです。たとえば、列長を1000文字に定義した場合でも、各国語キャラクタ・セットがUTF8ですべてのコード・ポイントが3バイト幅のときに1000文字の値を挿入しようとすると、エラーが戻されます。size
の値は長さの制約であり、容量を保証するものではありません。NCHAR
列に常に両方の各国語キャラクタ・セットのsize
文字を格納できるようにするには、666以下のsize
の値を使用します。
異なるキャラクタ・セットを持つデータベースおよびクライアント間で適切にデータを変換するには、NCHAR
データが正しい書式の文字列で構成されていることを確認してください。
CHAR
値をNCHAR
列に割り当てる場合、値はデータベース・キャラクタ・セットから各国語キャラクタ・セットに暗黙的に変換されます。NCHAR
値をCHAR
列に割り当てる場合、値は各国語キャラクタ・セットからデータベース・キャラクタ・セットに暗黙的に変換されます。NCHAR
値の文字の一部をデータベース・キャラクタ・セットで表現できない場合、セッション・パラメータNLS_NCHAR_CONV_EXCP
の値がTRUE
のときは、エラーが戻されます。パラメータの値がFALSE
の場合は、表現できない文字はデータベース・キャラクタ・セットのデフォルトの置換文字(通常は疑問符?または逆疑問符¿)に置き換えられます。
関連項目: Unicodeデータ型のサポートについては、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 |
VARCHAR2
データ型は、データベース・キャラクタ・セットの可変長の文字列を指定します。データベースの作成時には、データベース・キャラクタ・セットを指定します。
VARCHAR2
の列を含む表の作成時には、size
として列長を指定し、その後にオプションで長さの修飾子を指定する必要があります。修飾子BYTE
はバイト長セマンティクスを表し、修飾子CHAR
は文字長セマンティクスを表します。バイト長セマンティクスでは、size
は列に格納できる最大バイト数です。文字長セマンティクスでは、size
は列に格納できるデータベース・キャラクタ・セットの最大コード・ポイント数です。コード・ポイントは、データベース・キャラクタ・セットおよびコード・ポイントによってエンコードされた特定の文字に応じて1から4バイトです。いずれかの長さ修飾子を指定して、列の目的の長さセマンティクスを明示的に指定することをお薦めします。修飾子を指定しない場合は、列を作成しているセッションのNLS_LENGTH_SEMANTICS
パラメータの値によって長さセマンティクスが定義されますが、デフォルト・セマンティクスがBYTE
であるスキーマSYS
に表が属している場合を除きます。
文字値は、列の長さを超えない場合、空白埋めなしに、指定したとおりにVARCHAR2
列に格納されます。最大長を超える値を挿入しようとすると、Oracleはエラーを戻します。
size
の最小値は1です。最大値は次のとおりです。
32767 (MAX_STRING_SIZE
=
EXTENDED
の場合)
4000 (MAX_STRING_SIZE
=
STANDARD
の場合)
MAX_STRING_SIZE初期化パラメータと拡張データ型の内部記憶域メカニズムの詳細は、「拡張データ型」
を参照してください。
size
はバイトまたは文字(コード・ポイント)で表現できますが、VARCHAR2
列に格納できる文字値の独立した絶対最大長は、MAX_STRING_SIZE
に応じて32767または4000バイトです。たとえば、列長を32767文字に定義した場合でも、1つ以上のコード・ポイントの幅が1バイトより大きい32767文字の値を挿入しようとすると、エラーが戻されます。文字のsize
の値は長さの制約であり、容量を保証するものではありません。VARCHAR2
列に常にデータベース・キャラクタ・セットのsize
文字を格納できるようにするには、MAX_STRING_SIZE
= EXTENDED
の場合は8191以下、MAX_STRING_SIZE
= STANDARD
の場合は1000以下のsize
の値を使用します。
Oracleは、非空白埋め比較セマンティクスを使用してVARCHAR2
値を比較します。
異なるキャラクタ・セットを持つデータベース間で適切にデータを変換するには、VARCHAR2
データが正しい書式の文字列で構成されていることを確認してください。キャラクタ・セット・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
VARCHAR
データ型は、使用しないでください。かわりにVARCHAR2
データ型を使用してください。現在、VARCHAR
データ型はVARCHAR2
データ型と同じ意味で使用されていますが、VARCHAR
データ型は、異なる比較セマンティクスで比較される別の可変長文字列のデータ型に変更される予定です。
NVARCHAR2
データ型は、各国語キャラクタ・セットの可変長文字列を指定します。データベースの作成時に、各国語キャラクタ・セットをAL16UTF16またはUTF8として指定します。AL16UTF16およびUTF8は、Unicodeキャラクタ・セットの2つのエンコード方式(それぞれUTF-16およびCESU-8)であるため、NVARCHAR2
はUnicodeのみのデータ型です。
NVARCHAR2
列を使用して表を作成するときは、列長をsize
文字として指定するか、より正確に各国語キャラクタ・セットのコード・ポイントとして指定する必要があります。1つのコード・ポイントは、コード・ポイントによってエンコードされた特定の文字に応じて、AL16UTF16では常に2バイト、UTF8では1から3バイトです。
文字値は、列の長さを超えない場合、空白埋めなしに、指定したとおりにNVARCHAR2
の列に格納されます。最大長を超える値を挿入しようとすると、Oracleはエラーを戻します。
MAX_STRING_SIZE
=
EXTENDED
で各国語キャラクタ・セットがAL16UTF16の場合は16383
MAX_STRING_SIZE
=
EXTENDED
で各国語キャラクタ・セットがUTF8の場合は32767
MAX_STRING_SIZE
=
STANDARD
で各国語キャラクタ・セットがAL16UTF16の場合は2000
MAX_STRING_SIZE
=
STANDARD
で各国語キャラクタ・セットがUTF8の場合は4000
MAX_STRING_SIZE初期化パラメータと拡張データ型の内部記憶域メカニズムの詳細は、「拡張データ型」
を参照してください。
文字の最大列長とは関係なく、NVARCHAR2
列に格納できる値の絶対最大長は、MAX_STRING_SIZE
に応じて32767または4000バイトです。たとえば、列長を16383文字に定義した場合でも、各国語キャラクタ・セットがUTF8ですべてのコード・ポイントが3バイト幅のときに16383文字の値を挿入しようとすると、エラーが戻されます。size
の値は長さの制約であり、容量を保証するものではありません。NVARCHAR2
列に常に両方の各国語キャラクタ・セットのsize
文字を格納できるようにするには、MAX_STRING_SIZE
= EXTENDED
の場合は10922以下、MAX_STRING_SIZE
= STANDARD
の場合は1333以下のsize
の値を使用します。
Oracleは、非空白埋め比較セマンティクスを使用してNVARCHAR2
値を比較します。
異なるキャラクタ・セットを持つデータベースおよびクライアント間で適切にデータを変換するには、NVARCHAR2
データが正しい書式の文字列で構成されていることを確認してください。
VARCHAR2
値をNVARCHAR2
列に割り当てる場合、値はデータベース・キャラクタ・セットから各国語キャラクタ・セットに暗黙的に変換されます。NVARCHAR2
値をVARCHAR2
列に割り当てる場合、値は各国語キャラクタ・セットからデータベース・キャラクタ・セットに暗黙的に変換されます。NVARCHAR2
値の文字の一部をデータベース・キャラクタ・セットで表現できない場合、セッション・パラメータNLS_NCHAR_CONV_EXCP
の値がTRUE
のときは、エラーが戻されます。パラメータの値がFALSE
の場合は、表現できない文字はデータベース・キャラクタ・セットのデフォルトの置換文字(通常は疑問符?または逆疑問符¿)に置き換えられます。
関連項目: Unicodeデータ型のサポートについては、Oracle Databaseグローバリゼーション・サポート・ガイドを参照してください。比較セマンティクスについては、データ型の比較規則を参照してください。 |
数値データ型
Oracle Databaseの数値データ型は、正と負の固定小数点数と浮動小数点数、0(ゼロ)、無限大、および操作の未定義の結果である値(非数値、つまりNAN
)を格納します。数値データ型をリテラルとして指定する方法については、「数値リテラル」を参照してください。
NUMBER
データ型は、0(ゼロ)と、絶対値が1.0×10-130以上1.0×10126未満の範囲にある正と負の固定小数点数を格納します。1.0×10126以上の絶対値を持つ算術式を指定した場合、Oracleはエラーを戻します。NUMBER
の各値は1から22バイトである必要があります。
次の書式で固定小数点数を指定できます。
NUMBER(p,s)
それぞれの意味は、次のとおりです。
p
は精度(precision)、つまり最大有効桁数(10進)です。最上位有効桁は最も左側のゼロ以外の桁で、最下位有効桁は最も右側の桁です。Oracleは、100進数で20桁までの精度で数値の移植性を保証します。これは小数点の位置によって39桁(10進)または40桁(10進)になります。
s
は位取り(scale)、つまり小数点から最下位有効桁までの桁数です。位取りの有効範囲は-84から127です。
位取りが正の場合は、小数点の右側にある桁数で最下位有効桁を含んだ桁数になります。
位取りが負の場合、小数点の左側にある桁数です。この場合は最下位有効桁を含みません。位取りが負の場合、実際のデータは整数部分の右から指定された桁数のみ丸められるため、最下位有効桁は小数点の左側になります。たとえば、(10,-2)と指定すると100の位まで丸められます。
e
表記を使用する場合、位取りは通常、精度よりも大きくなります。位取りが精度より大きい場合、精度は小数点の右側にある最大有効桁数を示します。たとえば、NUMBER(4,5)
として定義された列は、小数点の後の最初の桁が0(ゼロ)である必要があり、小数点以下5桁を超える値はすべて丸められます。
入力に対する特別な整合性チェックとして、固定小数点数列の位取りと精度を指定することをお薦めします。位取りと精度を指定しても、すべての値が固定長に強制されるわけではありません。値が精度の有効範囲を超えると、Oracleはエラーを戻します。値が位取りの有効範囲を超えると、Oracleはその値を丸めます。
次の書式で整数を指定できます。
NUMBER(p)
これは、精度がp
で、位取りが0の固定小数点数です(NUMBER(p,0)
と同じです)。
次の書式で浮動小数点を指定できます。
NUMBER
精度および位取りを指定しない場合、最大の範囲および精度をOracleの数値に指定したことになります。
表2-2に、異なる精度および位取りを使用したOracleのデータの格納方法を示します。
表2-2 精度および位取りの格納
実際のデータ | 指定する精度と位取り | 格納されるデータ |
---|---|---|
123.89 |
|
123.89 |
123.89 |
|
124 |
123.89 |
|
精度を超える |
123.89 |
|
精度を超える |
123.89 |
|
123.89 |
123.89 |
|
123.9 |
123.89 |
|
100 |
.01234 |
|
.01234 |
.00012 |
|
.00012 |
.000127 |
|
.00013 |
.0000012 |
|
.0000012 |
.00000123 |
|
.0000012 |
1.2e-4 |
|
0.00012 |
1.2e-5 |
|
0.00001 |
FLOAT
データ型は、NUMBER
のサブタイプです。このデータ型は、精度とともに指定するか、または精度なしで指定でき、その定義はNUMBER
の場合と同じであり、1から126の範囲で指定します。位取りは指定できませんが、データから解釈されます。FLOAT
の各値は1から22バイトである必要があります。
2進精度から10進精度に変換するには、n
に0.30103を乗算します。10進精度から2進精度に変換するには、10進精度に3.32193を乗算します。2進精度の126桁は、10進精度の38桁とほぼ等しくなります。
NUMBER
とFLOAT
の違いは、例を使用して説明します。次の例では、同じ値がNUMBER
列とFLOAT
列に挿入されます。
CREATE TABLE test (col1 NUMBER(5,2), col2 FLOAT(5)); INSERT INTO test VALUES (1.23, 1.23); INSERT INTO test VALUES (7.89, 7.89); INSERT INTO test VALUES (12.79, 12.79); INSERT INTO test VALUES (123.45, 123.45); SELECT * FROM test; COL1 COL2 ---------- ---------- 1.23 1.2 7.89 7.9 12.79 13 123.45 120
この例では、戻されるFLOAT
の値は、5桁(2進)を超えることはできません。5桁(2進)で表すことができる10進数の最大値は31です。最後の行には、31を超える10進値が含まれています。このため、FLOAT
の値は、その有効桁数が5桁(2進)を超えないように切り捨てられる必要があります。したがって、123.45は、2桁の有効桁数(10進)のみを持ち、4桁(2進)しか必要のない120に丸められます。
ANSIのFLOAT
データを変換する際、Oracle Databaseは、OracleのFLOAT
データ型を内部的に使用します。OracleのFLOAT
は使用可能ですが、BINARY_FLOAT
およびBINARY_DOUBLE
データ型の方がより堅牢であるため、これらのデータ型を使用することをお薦めします。詳細は、「浮動小数点数」を参照してください。
浮動小数点数は、最初の桁から最後の桁までの任意の位置に小数点を置くことも、小数点を省略することもできます。指数は、数字の後に増加する桁数を表すときに、オプションで使用されます(たとえば、1.777 e-20)。小数点以下の桁数に制限はないため、浮動小数点数に対して位取りは指定できません。
2進浮動小数点数とNUMBER
では、Oracle Databaseによる内部的な値の格納方法が異なります。NUMBER
の場合、値は10進精度を使用して格納されます。NUMBER
でサポートされる範囲内および精度内のすべてのリテラルは、NUMBER
として正確に格納されます。これは、リテラルが10進精度(0から9)を使用して表されるためです。2進浮動小数点数は、2進精度(0および1)を使用して格納されます。このような格納スキームでは、10進精度を使用したすべての値を正確に表すことができません。値を10進精度から2進精度に変換するときに発生するエラーは、その値を2進精度から10進精度に戻すときには発生しない場合が多くあります。リテラル0.1はその一例です。
Oracle Databaseでは、浮動小数点数専用の2種類の数値データ型を提供しています。
BINARY_FLOAT
は、32ビットの単精度浮動小数点数データ型です。BINARY_FLOAT
の各値には4バイトが必要です。
BINARY_DOUBLE
は、64ビットの倍精度浮動小数点数データ型です。各BINARY_DOUBLE
の値には8バイトが必要です。
NUMBER
列では、浮動小数点数は10進精度を持ちます。BINARY_FLOAT
列またはBINARY_DOUBLE
列では、浮動小数点数は2進精度を持ちます。2進浮動小数点数では、特殊な値である無限大およびNaN
(非数値)がサポートされます。
表2-3に示す制限内で、浮動小数点数を指定できます。浮動小数点数を指定する書式については、「数値リテラル」を参照してください。
表2-3 浮動小数点数の制限
値 | BINARY_FLOAT | BINARY_DOUBLE |
---|---|---|
正の最大有限値 |
3.40282E+38F |
1.79769313486231E+308 |
正の最小有限値 |
1.17549E-38F |
2.22507485850720E-308 |
IEEE754への規格準拠 Oracleの浮動小数点データ型の実装は、2進浮動小数点算術の電気電子学会(IEEE)規格であるIEEE754-1985(IEEE754)規格に準拠しています。浮動小数点データ型は次の点でIEEE754に準拠しています。
SQLファンクションSQRT
は平方根を実装します。「SQRT」を参照してください。
SQLファンクションREMAINDER
は余りを実装します。「REMAINDER」を参照してください。
算術演算子が準拠しています。「算術演算子」を参照してください。
比較演算子が準拠しています。ただし、NaN
と比較する場合は除きます。Oracleは、NaN
が他のすべての値より大きいとみなし、NaN
とNaN
は等しいと評価します。「浮動小数点条件」を参照してください。
変換演算子が準拠しています。「変換ファンクション」を参照してください。
デフォルトの丸めモードがサポートされています。
デフォルトの例外処理モードがサポートされています。
特殊な値であるINF
、-INF
およびNaN
がサポートされています。「浮動小数点条件」を参照してください。
BINARY_FLOAT
およびBINARY_DOUBLE
の値を整数値のBINARY_FLOAT
およびBINARY_DOUBLE
に丸める方法として、SQLファンクションROUND
、TRUNC
、CEIL
およびFLOOR
が提供されています。
BINARY_FLOAT
およびBINARY_DOUBLE
を10進値に、10進値をBINARY_FLOAT
およびBINARY_DOUBLE
に丸める方法として、SQLファンクションTO_CHAR
、TO_NUMBER
、TO_NCHAR
、TO_BINARY_FLOAT
、TO_BINARY_DOUBLE
およびCAST
が提供されています。
浮動小数点データ型は次の点ではIEEE754に準拠していません。
-0は+0に強制変換されます。
NaN
との比較はサポートされていません。
すべてのNaN
値は、BINARY_FLOAT_NAN
またはBINARY_DOUBLE_NAN
のいずれかに強制変換されます。
デフォルト以外の丸めモードはサポートされていません。
デフォルト以外の例外処理モードはサポートされていません。
数値データ型をサポートする操作で、操作の引数が様々なデータ型を持つ場合、Oracleが使用するデータ型は、数値の優先順位によって判断されます。数値の優先順位が最も高いデータ型はBINARY_DOUBLE
であり、その次がBINARY_FLOAT
、最後がNUMBER
となります。したがって、複数の数値に対する操作では、次のようになります。
オペランドのいずれかがBINARY_DOUBLE
の場合、Oracleは操作の実行前に、すべてのオペランドを暗黙的にBINARY_DOUBLE
に変換しようとします。
オペランドにBINARY_DOUBLE
はないが、いずれかがBINARY_FLOAT
の場合、Oracleは操作の実行前に、すべてのオペランドを暗黙的にBINARY_FLOAT
に変換しようとします。
それ以外の場合は、Oracleは操作の実行前に、すべてのオペランドをNUMBER
に変換しようとします。
暗黙的な変換が必要な場合に変換に失敗すると、操作は実行されません。暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。
他のデータ型のコンテキストでは、数値データ型の優先順位は、日時データ型と期間データ型よりも低く、文字データ型とその他のすべてのデータ型よりも高くなります。
LONG
列を持つ表は作成しないでください。かわりに、LOB列(CLOB
、NCLOB
またはBLOB
)を使用してください。LONG
列は、下位互換性のためにサポートされています。
LONG
列には、2GB(231)から1を引いたバイト数までの可変長の文字列を格納できます。LONG
列には、多くの点でVARCHAR2
列と同じ特長があります。LONG
列を使用すると、長いテキスト文字列を格納できます。LONG
値の長さは、ご使用のコンピュータで利用できるメモリーによって制限される場合もあります。LONG
リテラルは、「テキスト・リテラル」の説明のような形式になります。
既存のLONG
列もLOB列に変換することをお薦めします。LOB列は、LONG
列ほど制限は多くありません。LOB機能はリリースごとに拡張されていますが、LONG
機能は最近のリリースでは変更されていません。LONG列からLOB列への変換については、「ALTER TABLE」
の「modify_col_properties」および「TO_LOB」
を参照してください。
SELECT
リスト
UPDATE
文のSET
句
INSERT
文のVALUES
句
表には複数のLONG
列を含めることはできません。
LONG
属性を持つオブジェクトは作成できません。
LONG
列は、WHERE
句または整合性制約では指定できません(NULL
およびNOT
NULL
制約は除く)。
LONG
列に索引を付けることはできません。
LONG
データは正規表現では指定できません。
ストアド・ファンクションはLONG
値を戻すことはできません。
LONG
データ型を使用して、PL/SQLプログラム・ユニットの変数または引数を宣言できます。ただし、そのプログラム・ユニットは、SQLからコールできません。
単一のSQL文に指定する、すべてのLONG
列、更新された表、ロックされた表は、同一データベース上にある必要があります。
LONG
列およびLONG
RAW
列は、分散型のSQL文で使用できません。また、レプリケートできません。
LONG
とLOBの両方の列を持つ表では、1つのSQL文でLONG
とLOB列の両方に4000バイトより大きいデータをバインドすることはできません。ただし、LONG
列またはLOB列のいずれか一方には、4,000バイトを超えるデータをバインドできます。
また、LONG
列はSQL文の次のような部分では使用できません。
GROUP
BY
句、ORDER
BY
句、CONNECT
BY
句またはSELECT
文にあるDISTINCT
演算子
SELECT
文のUNIQUE
演算子
CREATE
CLUSTER
文の列リスト
CREATE
MATERIALIZED
VIEW
文のCLUSTER
句
SQL組込みファンクション、式または条件
GROUP
BY
句を含む問合せのSELECT
構文のリスト
UNION
、INTERSECT
またはMINUS
集合演算子によって結合されている副問合せまたは問合せのSELECT
構文のリスト
CREATE
TABLE
... AS
SELECT
文のSELECT
構文のリスト
ALTER
TABLE
... MOVE
文
INSERT
文の副問合せのSELECT
構文のリスト
トリガー内のSQL文で、データをLONG
列に挿入できます。
LONG
列のデータをCHAR
やVARCHAR2
などの制約があるデータ型に変換できる場合は、トリガー内のSQL文でLONG
列を参照できます。
トリガー内の変数は、LONG
データ型を使用して宣言できません。
:NEW
と:OLD
はLONG
列で使用できません。
Oracle Call Interfaceを使用して、データベースからLONG
値の一部を検索できます。
関連項目: 『Oracle Call Interfaceプログラマーズ・ガイド』 |
日時データ型には、DATE
、TIMESTAMP
、TIMESTAMP
WITH
TIME
ZONE
およびTIMESTAMP
WITH
LOCAL
TIME
ZONE
があります。日時データ型の値は、「日時」とも呼ばれます。期間データ型には、INTERVAL
YEAR
TO
MONTH
およびINTERVAL
DAY
TO
SECOND
があります。期間データ型の値は、「期間」とも呼ばれます。日時値と期間値をリテラルとして表す方法の詳細は、「日時リテラル」および「期間リテラル」を参照してください。
日時および期間はいずれもフィールドで構成されます。これらのフィールドの値は、データ型の値によって決まります。表2-4に、日時フィールド、および日時と期間の有効な値を示します。
日時データのDML操作で正しい結果を得るには、組込みSQLファンクションDBTIMEZONE
およびSESSIONTIMEZONE
で問い合せることによって、データベースおよびセッションのタイムゾーンを確認します。タイムゾーンを手動で設定していない場合、Oracle Databaseは、オペレーティング・システムのタイムゾーンをデフォルトで使用します。オペレーティング・システムのタイムゾーンがOracleで有効でない場合は、Oracleは、協定世界時(UTC)(以前のグリニッジ標準時)をデフォルトの値として使用します。
表2-4 日時フィールド、および日時と期間の値
日時フィールド | 日時に有効な値 | 期間に有効な値 |
---|---|---|
|
-4712から9999(0を除きます) |
正または負のすべての整数 |
|
01から12 |
0から11 |
|
01から31(現在のNLSカレンダ・パラメータに従った |
正または負のすべての整数 |
|
00から23 |
0から23 |
|
00から59 |
0から59 |
|
00から59.9(n)(「9(n)」は秒の小数部の精度。) |
00から59.9(n)(「9(n)」は秒の小数部の期間の精度) |
|
-12から14(この範囲は夏時間の変更を保存します。) |
適用なし |
(表の後の注意を参照) |
00から59。 |
適用なし |
|
|
適用なし |
|
|
適用なし |
注意: TIMEZONE_HOUR およびTIMEZONE_MINUTE は同時に指定され、+ |- hh : mi の形式(-12:59から+14:00までの値を使用)で1つのエンティティとして解釈されます。APIにタイムゾーン値を指定する方法の詳細は、『Microsoft Windows用Oracle Data Provider for .NET開発者ガイド』を参照してください。 |
DATE
データ型は、日付および時刻の情報を格納するために使用します。日付および時刻の情報は、文字データ型および数値データ型で表現できますが、DATE
データ型には特別に対応付けられているプロパティがあります。各DATE
値には、年、月、日、時、分および秒の情報が格納されます。
DATE
値をリテラルに指定するか、文字値や数値をTO_DATE
ファンクションによって日付値に変換できます。これらの方法でのDATE
値の表し方の例は、「日時リテラル」を参照してください。
ユリウス日は、紀元前4712年1月1日から経過した日数です。ユリウス日によって共通の基準で日付を算定できます。日付ファンクションTO_DATE
とTO_CHAR
で日付書式モデル「J」を使用して、OracleのDATE
値とユリウス日の間で変換を行うことができます。
注意: Oracle Databaseでは、ユリウス日の計算に天文学方式を使用しています。この方式では、紀元前4713年は-4712として計算されます。これに対し、歴史学方式では、紀元前4713年は-4713として計算されます。Oracleのユリウス日を、歴史学方式で計算した値と比較する場合には、紀元前の日付に365日の違いがあることに注意してください。詳細は、http://aa.usno.navy.mil/faq/docs/millennium.php を参照してください。 |
デフォルトの日付値は次のように決まります。
年は現在の年で、SYSDATE
で戻されます。
月は現在の月で、SYSDATE
で戻されます。
日は01、つまり月の最初の日になります。
時、分、秒はすべて0です。
これらのデフォルト値は、次の例(5月に発行)のように、日付が指定されていない場合に日付値を要求する問合せで使用されます。
SELECT TO_DATE('2009', 'YYYY') FROM DUAL; TO_DATE(' --------- 01-MAY-09
例 次の文では、2009年1月1日をユリウス日で戻します。
SELECT TO_CHAR(TO_DATE('01-01-2009', 'MM-DD-YYYY'),'J') FROM DUAL; TO_CHAR ------- 2454833
TIMESTAMP
データ型は、DATE
データ型の拡張機能です。DATE
データ型の年、月および日に加えて、時、分および秒の値を格納します。このデータ型は、正確な時刻値の格納と、複数の地域にまたがる日時情報の収集および評価に有効です。TIMESTAMP
データ型は次のように指定します。
TIMESTAMP [(fractional_seconds_precision)]
fractional_seconds_precision
には、オプションで、Oracleが格納する桁数を、SECOND
日時フィールドの小数部まで指定します。このデータ型の列を作成する場合、0から9の値を指定できます。デフォルトは6です。
TIMESTAMP
WITH
TIME
ZONE
は、タイムゾーン地域名
またはタイムゾーン・オフセットを値に含むTIMESTAMPの変形です。タイムゾーン・オフセットは、ローカルの時刻とUTC(時および分)との差異です。このデータ型は、ローカル・タイムゾーン情報を保持する場合に有効です。
TIMESTAMP
WITH
TIME
ZONE
データ型は、次のように指定します。
TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE
fractional_seconds_precision
には、オプションで、Oracleが格納する桁数を、SECOND
日時フィールドの小数部まで指定します。このデータ型の列を作成する場合、0から9の値を指定できます。デフォルトは6です。
Oracleのタイムゾーン・データは、http://www.iana.org/time-zones/
で入手できるパブリック・ドメイン情報から導出されます。Oracleのタイムゾーン・データは、このサイトで入手できる最新のデータを反映していない場合があります。
関連項目:
|
TIMESTAMP
WITH
LOCAL
TIME
ZONE
は、TIMESTAMP
のもう1つの変形であり、タイムゾーン情報を識別します。これは、TIMESTAMP
WITH
TIME
ZONE
とは異なり、データベースに格納されるデータはデータベース・タイムゾーンに対して正規化され、タイムゾーン情報は列データの一部として格納されません。ユーザーがデータを検索すると、Oracleはユーザーのローカル・セッション・タイムゾーンのデータを戻します。このデータ型は、2層アプリケーションでクライアント・システムのタイムゾーンの日時情報を常に表示する場合に有効です。
TIMESTAMP
WITH
LOCAL
TIME
ZONE
データ型は、次のように指定します。
TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE
fractional_seconds_precision
には、オプションで、Oracleが格納する桁数を、SECOND
日時フィールドの小数部まで指定します。このデータ型の列を作成する場合、0から9の値を指定できます。デフォルトは6です。
Oracleのタイムゾーン・データは、http://www.iana.org/time-zones/
で入手できるパブリック・ドメイン情報から導出されます。Oracleのタイムゾーン・データは、このサイトで入手できる最新のデータを反映していない場合があります。
関連項目:
|
INTERVAL
YEAR
TO
MONTH
は、YEAR
およびMONTH
日時フィールドを使用して期間を格納します。このデータ型は、年および月の値のみが重要な場合に、2つの日時の値の正確な違いを表す場合に有効です。
INTERVAL
YEAR
TO
MONTH
は、次のように指定します。
INTERVAL YEAR [(year_precision)] TO MONTH
year_precision
は、YEAR
日時フィールドの桁数です。year_precision
のデフォルト値は2です。
期間値をリテラルとして指定すると、高い柔軟性が得られます。期間値をリテラルとして指定する方法の詳細は、「期間リテラル」を参照してください。期間の使用例は、「日時および期間の例」を参照してください。
INTERVAL
DAY
TO
SECOND
は、日付、時、分および秒で期間を格納します。このデータ型は、2つの日時の値の正確な違いを表す場合に有効です。
このデータ型は、次のように指定します。
INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)]
それぞれの意味は、次のとおりです。
day_precision
は、DAY
日時フィールドの桁数です。有効範囲は0から9です。デフォルトは2です。
fractional_seconds_precision
は、SECOND
日時フィールドの小数部の桁数です。有効範囲は0から9です。デフォルトは6です。
期間値をリテラルとして指定すると、高い柔軟性が得られます。期間値をリテラルとして指定する方法の詳細は、「期間リテラル」を参照してください。期間の使用例は、「日時および期間の例」を参照してください。
日付(DATE
)、タイムスタンプ(TIMESTAMP
、TIMESTAMP
WITH
TIME
ZONE
およびTIMESTAMP
WITH
LOCAL
TIME
ZONE
)および期間(INTERVAL
DAY
TO
SECOND
およびINTERVAL
YEAR
TO
MONTH
)データに対して、様々な演算処理を実行できます。Oracleは、次の規則に基づいて結果を計算します。
日付およびタイムスタンプ値の演算処理ではNUMBER
定数を使用できますが、期間値では使用できません。Oracleは、タイムスタンプ値を内部的に日付値に変換し、日時の演算で使用されるNUMBER
定数と期間式を日数として解析します。たとえば、SYSDATE
+ 1は明日です。SYSDATE
-7は1週間前です。SYSDATE
+ (10/1440)は10分後です。SYSDATE
からemployees
サンプル表のhire_date
列を引くと、各従業員が雇用されてから経過した日数が戻ります。日付値またはタイムスタンプ値の乗算や除算はできません。
Oracleは、BINARY_FLOAT
オペランドおよびBINARY_DOUBLE
オペランドを暗黙的にNUMBER
に変換します。
各DATE
値には時刻コンポーネントが含まれるため、多くの場合、日付操作の結果には小数部が含まれます。この小数部は、日を単位として表されています。たとえば、1.5日は36時間です。小数部は、DATE
データの一般的な操作を行うOracle組込みファンクションによっても戻されます。たとえば、MONTHS_BETWEEN
ファンクションは、2つの日付の間の月数を戻します。結果の小数部は、月(1か月は31日)を単位として表されます。
1つのオペランドがDATE
値または数値であり、タイムゾーンおよび小数部コンポーネントのいずれも含まない場合、次のようになります。
Oracleは、他方のオペランドを暗黙的にDATE
データに変換します。ただし、数値と期間を掛けて期間を戻す乗算を行う場合は除きます。
他方のオペランドがタイムゾーン値を持つ場合、Oracleは戻り値でセッション・タイムゾーンを使用します。
他方のオペランドが小数部の値を持つ場合、その小数部の値は失われます。
DATE
データ型専用に設計された組込みファンクションにタイムスタンプ値、期間値または数値を渡すと、OracleはDATE
値以外の値を暗黙的にDATE
値に変換します。DATEへの暗黙的な変換を実行するファンクションの詳細は、「日時ファンクション」
を参照してください。
期間の計算が日時の値を戻す場合、その結果は実際の日時の値である必要があります。実際の日時の値でない場合、データベースはエラーを戻します。たとえば、次の2つの文はエラーを戻します。
SELECT TO_DATE('31-AUG-2004','DD-MON-YYYY') + TO_YMINTERVAL('0-1') FROM DUAL; SELECT TO_DATE('29-FEB-2004','DD-MON-YYYY') + TO_YMINTERVAL('1-0') FROM DUAL;
最初の文は、1か月31日の月に1か月が追加され、9月31日となります。これは有効な日付ではないため、この文は失敗します。2つ目の文は、4年に一度のみ存在する日付に1年を追加する計算は無効であるため、失敗します。ただし、2月29日に4年を追加する計算は有効であるため、次の文は成功します。
SELECT TO_DATE('29-FEB-2004', 'DD-MON-YYYY') + TO_YMINTERVAL('4-0') FROM DUAL; TO_DATE(' --------- 29-FEB-08
Oracleは、すべてのタイムスタンプの演算をUTC時間で実行します。TIMESTAMP
WITH
LOCAL
TIME
ZONE
では、Oracleは、日時の値をデータベース・タイムゾーンからUTCに変換し、演算を実行した後にデータベース・タイムゾーンに変換しなおします。TIMESTAMP
WITH
TIME
ZONE
では、日時の値は常にUTCであるため、変換は必要ありません。
表2-5に、日時の演算処理のマトリックスを示します。ダッシュはサポートされていない処理を表します。
表2-5 日時の演算のマトリックス
オペランドおよび演算子 | DATE | TIMESTAMP | INTERVAL | 数値 |
---|---|---|---|---|
DATE |
||||
+ |
|
|
|
|
- |
|
|
|
|
* |
|
|
|
|
/ |
|
|
|
|
TIMESTAMP |
||||
+ |
|
|
|
|
- |
|
|
|
|
* |
|
|
|
|
/ |
|
|
|
|
INTERVAL |
||||
+ |
|
|
|
|
- |
|
|
|
|
* |
|
|
|
|
/ |
|
|
|
|
数値 |
||||
+ |
|
|
|
|
- |
|
|
|
|
* |
|
|
|
|
/ |
|
|
|
|
例 期間値の式を開始時間に追加できます。order_date
列を持つサンプル表oe.orders
について考えます。次の文は、order_date
列の値に30日を加算します。
SELECT order_id, order_date + INTERVAL '30' DAY AS "Due Date" FROM orders ORDER BY order_id, "Due Date";
Oracle Databaseは、指定したタイムゾーン地域に、夏時間が適用されているかを自動的に判断し、それに応じてローカル時刻の値を戻します。日時の値は、境界を除いたすべての指定した地域において、夏時間が適用されているかをOracleが判断するために有効です。夏時間の開始または終了時に、境界が発生します。たとえば、米国の太平洋地域では、夏時間の開始時、時刻は午前2時から午前3時に変更されます。午前2時と午前3時の間の1時間は存在しません。夏時間の終了時、時刻は午前2時から午前1時に変更されます。午前1時と午前2時の間の1時間は繰り返されます。
このような境界を解決するために、OracleはTZR
およびTZD
書式要素を使用します。詳細は、表2-17を参照してください。TZR
は、日時の入力文字列でタイムゾーン地域名を表します。たとえば、'Australia/North
'、'UTC
'および'Singapore
'などです。TZD
は、夏時間情報を含むタイムゾーン地域名の略称書式です。たとえば、米国/太平洋標準時はPST
、米国/太平洋夏時間はPDT
などです。TZR
およびTZD
書式要素の値を表示するには、V$TIMEZONE_NAMES
動的パフォーマンス・ビューのTZNAME
およびTZABBREV
列に問合せを実行してください。
注意: 夏時間機能には、タイムゾーン地域名が必要です。この名前は、大小2つのタイムゾーン・ファイルに格納されます。これらのファイルのうち、使用する環境および使用するOracle Databaseのリリースに応じて、いずれか一方がデフォルトのファイルになります。タイムゾーン・ファイルおよびタイムゾーン名の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 |
両方のファイル内のすべてのタイムゾーン地域名のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
Oracleのタイムゾーン・データは、http://www.iana.org/time-zones/
で入手できるパブリック・ドメイン情報から導出されます。Oracleのタイムゾーン・データは、このサイトで入手できる最新のデータを反映していない場合があります。
関連項目:
|
次の例では、日時および期間データ型の指定方法を示します。
CREATE TABLE time_table (start_time TIMESTAMP, duration_1 INTERVAL DAY (6) TO SECOND (5), duration_2 INTERVAL YEAR TO MONTH);
start_time
列は、TIMESTAMP
型です。TIMESTAMP
の暗黙的な小数部の精度は6です。
duration_1
列は、INTERVAL
DAY
TO
SECOND
型です。DAY
フィールドの最大桁数は6です。また、小数部の最大桁数は5です(その他のすべての日時フィールドの最大桁数は2です)。
duration_2
列は、INTERVAL
YEAR
TO
MONTH
型です。各フィールド(YEAR
およびMONTH
)の値の最大桁数は2です。
期間データ型には書式モデルはありません。そのため、これらの表示を調整するには、EXTRACT
などの文字ファンクションを結合させて要素を連結させる必要があります。たとえば、次の例では、hr.employees
とoe.orders
表にそれぞれ問合せを行い、期間出力の書式を"yy-mm"から"yy years mm months"に、および"dd-hh"から"dddd days hh hours"に変更します。
SELECT last_name, EXTRACT(YEAR FROM (SYSDATE - hire_date) YEAR TO MONTH) || ' years ' || EXTRACT(MONTH FROM (SYSDATE - hire_date) YEAR TO MONTH) || ' months' "Interval" FROM employees; LAST_NAME Interval ------------------------- -------------------- OConnell 2 years 3 months Grant 1 years 9 months Whalen 6 years 1 months Hartstein 5 years 8 months Fay 4 years 2 months Mavris 7 years 4 months Baer 7 years 4 months Higgins 7 years 4 months Gietz 7 years 4 months . . . SELECT order_id, EXTRACT(DAY FROM (SYSDATE - order_date) DAY TO SECOND) || ' days ' || EXTRACT(HOUR FROM (SYSDATE - order_date) DAY TO SECOND) || ' hours' "Interval" FROM orders; ORDER_ID Interval ---------- -------------------- 2458 780 days 23 hours 2397 685 days 22 hours 2454 733 days 21 hours 2354 447 days 20 hours 2358 635 days 20 hours 2381 508 days 18 hours 2440 765 days 17 hours 2357 1365 days 16 hours 2394 602 days 15 hours 2435 763 days 15 hours . . .
RAW
データ型とLONG
RAW
データ型には、異なるシステム間でデータを移動する際にOracle Databaseによって明示的に変換されないデータが格納されます。これらのデータ型は、バイナリ・データまたはバイト列に使用されます。たとえば、LONG
RAW
は、図形、音声、文書、またはバイナリ・データの配列の格納に使用できますが、解析方法は用途によって異なります。
LONG
RAW
列をバイナリLOB(BLOB
)へ変換することをお薦めします。LOB列は、LONG
列ほど制限は多くありません。詳細は、「TO_LOB」を参照してください。
RAW
は、VARCHAR2
と同様に可変長データ型ですが、Oracle Net(クライアント・ソフトウェアとデータベース、またはデータベースとデータベースを接続します)およびOracleのインポート/エクスポート・ユーティリティは、RAW
またはLONG
RAW
データの転送時に文字変換を行いません。これに対し、Oracle NetおよびOracleのインポート/エクスポート・ユーティリティは、自動的にCHAR
、VARCHAR2
およびLONG
データをあるデータベース・キャラクタ・セットから別のデータベース・キャラクタ・セットに変換するか(データがデータベース間で送信される場合)、またはデータベース・キャラクタ・セットからクライアント・キャラクタ・セットに変換します(データがデータベースとクライアントの間で送信される場合)。クライアント・キャラクタ・セットは、クライアント・インタフェースのタイプ(OCIやJDBCなど)およびクライアント構成(たとえば、NLS_LANG
環境変数)によって決定されます。
OracleがRAW
または LONG
RAW
データを文字データに暗黙的に変換する場合、結果として生成される文字値は、バイナリ入力を16進表記で表したものになり、各文字はRAW
データの連続した4つのビットを表す16進数(0
-9
、A
-F
)になります。たとえば、ビット列が11001011で表示される1バイトのRAW
データは、CB
という値になります。
Oracleは、文字データをRAW
またはLONG
RAW
に暗黙的に変換する場合、連続した入力文字をバイナリ・データの4つの連続したビットを16進表記で表したものとして解釈し、これらのビットを連結してRAW
またはLONG
RAW
値を生成します。入力文字の中に16進数(0
-9
、A
-F
、a
-f
)以外の文字がある場合は、エラーが報告されます。文字数が奇数の場合、結果は未定義になります。
SQLファンクションRAWTOHEX
およびHEXTORAW
は、前述の暗黙的な変換と同等の明示的な変換を行います。オラクル社が提供するPL/SQLパッケージ(UTL_RAW
およびUTL_I18N
)のファンクションを使用すると、RAW
および文字データ間の他のタイプの変換を行うことができます。
組込みLOBデータ型のBLOB
、CLOB
、NCLOB
(内部ファイルに格納)およびBFILE
(外部ファイルに格納)には、構造化されていない大きいデータ(text、image、video、spatial dataなど)を格納できます。BLOB
、CLOB
およびNCLOB
データの最大サイズは、232から1を引いたバイト数にLOB記憶域のCHUNK
パラメータの値を掛けた値です。データベースの表領域が標準のブロック・サイズで、LOB列を作成したときにLOB記憶域のCHUNK
パラメータのデフォルト値を使用した場合には、前述の値は232バイトから1を引いた値にデータベース・ブロック・サイズを掛けた値に等しくなります。BFILE
データの最大サイズは、264バイトから1を引いた値ですが、この最大サイズはオペレーティング・システムによって制限される場合があります。
表を作成するときに、LOB列またはLOBオブジェクト属性に、オプションで表に指定したものとは異なる表領域および記憶特性を指定できます。
LOB列の作成時に行の記憶域を使用可能にしている場合、CLOB
、NCLOB
およびBLOB
の値は、約4000バイトを上限として表内に格納されます。4000バイトを超えるLOBは、常に外部ファイルに格納されます。詳細は、「ENABLE STORAGE IN ROW」を参照してください。
LOB列には、内部のLOB値(データベース内)または外部のLOB値(データベース外)を参照できるLOBロケータが含まれています。表からLOBを選択すると、実際にはLOBのロケータが戻され、LOB値全体は戻されません。LOBに対するDBMS_LOB
パッケージとOracle Call Interface(OCI)の操作は、これらのロケータを介して行われます。
LOBは、LONG
型およびLONG
RAW
型と似ていますが、次の点で異なります。
LOBは、オブジェクト型(ユーザー定義のデータ型)の属性に指定できます。
LOBロケータは、表の列に格納されます。実際のLOB値は、表の列に格納される場合と格納されない場合があります。BLOB
、NCLOB
およびCLOB
の値は、別々の表領域に格納されます。BFILE
データは、サーバー上の外部ファイルに格納されます。
LOB列にアクセスしたときに戻されるのはロケータです。
LOBの最大サイズは、232から1を引いたバイト数にデータベース・ブロック・サイズを掛けた値です。BFILE
データの最大サイズは、264バイトから1を引いた値ですが、この最大サイズはオペレーティング・システムによって制限される場合があります。
LOBでは、効果的かつランダムなピース単位のデータ・アクセスおよび操作が可能です。
1つの表内に2つ以上のLOB列を定義できます。
NCLOB
の例外を除いて、1つのオブジェクトに1つ以上のLOB属性を定義できます。
LOBバインド変数を宣言できます。
LOB列とLOB属性を選択できます。
1つ以上のLOB列または1つ以上のLOB属性を持つオブジェクトが含まれている新しい行を挿入したり、既存の行を更新できます。更新操作では、内部LOB値をNULL
、つまり空に設定したり、LOB全体をデータに置き換えられます。BFILE
は、NULL
に設定したり、別のファイルを指すように設定できます。
LOB行と列の交差部またはLOB属性を、別のLOB行と列の交差部またはLOB属性を使用して更新できます。
LOB列またはLOB属性が含まれている行を削除できます(これによってLOB値も削除されます)。BFILEの場合、実際のオペレーティング・システム・ファイルは削除されません。
INSERT
文またはUPDATE
文を発行するだけで、表内LOB列(データベースに格納されているLOB列)またはLOB属性(データベースに格納されているオブジェクト型列の属性)の行にアクセスして移入することができます。
LOB列の制限事項: LOB列には、多数のルールおよび制限事項があります。詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。
BFILE
データ型を使用すると、Oracle Database外のファイル・システムに格納されているバイナリ・ファイルLOBにアクセスできます。BFILE
列または属性には、サーバーのファイル・システム上のバイナリ・ファイルに対するポインタとして機能する、BFILE
ロケータが格納されます。ロケータには、ディレクトリ名とファイル名が保持されます。
BFILENAME
ファンクションを使用すると、実表のデータに影響を与えずにBFILE
のファイル名およびパスを変更できます。この組込みSQLファンクションの詳細は、「BFILENAME」を参照してください。
バイナリ・ファイルLOBは、トランザクションには関係なく、リカバリができません。ファイルの統合性と耐久性を提供しているのは基本にあるオペレーティング・システムです。BFILE
データの最大サイズは、264バイトから1を引いた値ですが、この最大サイズはオペレーティング・システムによって制限される場合があります。
データベース管理者は、外部ファイルが存在し、Oracleのプロセスがファイルに対するオペレーティング・システムの読取り権限を持っていることを確認する必要があります。
BFILE
データ型を使用すると、サイズが大きいバイナリ・ファイルの読取り専用のサポートが有効になります。この場合、ファイルを修正またはレプリケートすることはできません。Oracleでは、ファイル・データにアクセスするためのAPIが提供されています。ファイル・データにアクセスするために使用する主なインタフェースは、DBMS_LOB
パッケージとOracle Call Interface(OCI)です。
関連項目: LOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』および『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。また、「CREATE DIRECTORY」も参照してください。 |
BLOB
データ型は、構造化されていないバイナリ・ラージ・オブジェクトを格納するために使用します。BLOB
オブジェクトは、キャラクタ・セットのセマンティクスを持たないビットストリームとして考えることができます。BLOB
オブジェクトには、4GBから1を引いたバイト数にLOB記憶域のCHUNK
パラメータの値を掛けた値のサイズまでのバイナリ・データを格納できます。データベースの表領域が標準のブロック・サイズで、LOB列を作成したときにLOB記憶域のCHUNK
パラメータのデフォルト値を使用した場合には、前述の値は4GBから1を引いた値にデータベース・ブロック・サイズを掛けた値に等しくなります。
BLOB
オブジェクトでは、トランザクションが完全にサポートされます。SQL、DBMS_LOB
パッケージまたはOracle Call Interface(OCI)を介して行った変更は、すべてトランザクションに反映されます。BLOB
値の操作は、コミットおよびロールバックできます。ただし、1つのトランザクションのPL/SQLまたはOCI変数をBLOB
ロケータに保存し、そのロケータを別のトランザクションまたはセッションで使用することはできません。
CLOB
データ型は、シングルバイトおよびマルチバイト・キャラクタ・データを格納するために使用します。固定幅および可変幅のキャラクタ・セットがサポートされます。両方のキャラクタ・セットでデータベース・キャラクタ・セットを使用します。CLOB
オブジェクトには、4GBから1を引いたバイト数にLOB記憶域のCHUNK
パラメータの値を掛けた値のサイズまでの文字データを格納できます。データベースの表領域が標準のブロック・サイズで、LOB列を作成したときにLOB記憶域のCHUNK
パラメータのデフォルト値を使用した場合には、前述の値は4GBから1を引いた値にデータベース・ブロック・サイズを掛けた値に等しくなります。
CLOB
オブジェクトでは、トランザクションが完全にサポートされます。SQL、DBMS_LOB
パッケージまたはOracle Call Interface(OCI)を介して行った変更は、すべてトランザクションに反映されます。CLOB
値の操作は、コミットおよびロールバックできます。ただし、1つのトランザクションのPL/SQLまたはOCI変数をCLOB
ロケータに保存し、そのロケータを別のトランザクションまたはセッションで使用することはできません。
NCLOB
データ型は、Unicodeデータを格納するために使用します。固定幅および可変幅のキャラクタ・セットがサポートされます。両方のキャラクタ・セットで各国語キャラクタ・セットを使用します。NCLOB
オブジェクトには、4GBから1を引いたバイト数にLOB記憶域のCHUNK
パラメータの値を掛けた値のサイズまでの文字テキスト・データを格納できます。データベースの表領域が標準のブロック・サイズで、LOB列を作成したときにLOB記憶域のCHUNK
パラメータのデフォルト値を使用した場合には、前述の値は4GBから1を引いた値にデータベース・ブロック・サイズを掛けた値に等しくなります。
NCLOB
オブジェクトでは、トランザクションが完全にサポートされます。SQL、DBMS_LOB
パッケージまたはOCIを介して行った変更は、すべてトランザクションに反映されます。NCLOB
値の操作は、コミットおよびロールバックできます。ただし、1つのトランザクションのPL/SQLまたはOCI変数をNCLOB
ロケータに保存し、そのロケータを別のトランザクションまたはセッションで使用することはできません。
関連項目: Unicodeデータ型のサポートについては、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 |
Oracle Database 12c以降では、VARCHAR2
、NVARCHAR2
、およびRAW
の各データ型に、32,767バイトの最大サイズを指定できます。この新しい最大サイズをデータベースでサポートするかどうかは、初期化パラメータMAX_STRING_SIZE
を次のように設定することで制御できます。
MAX_STRING_SIZE
=
STANDARD
の場合、Oracle Database 12cより前のリリースのサイズ制限が適用されます。このサイズ制限は、VARCHAR2
データ型とNVARCHAR2
データ型については4,000バイト、およびRAW
データ型については2,000バイトになります。これはデフォルトです。
MAX_STRING_SIZE
=
EXTENDED
の場合、VARCHAR2
、NVARCHAR2
、およびRAW
の各データ型について、サイズ制限は32,767バイトになります。
注意: MAX_STRING_SIZE = EXTENDED を設定すると、データベース・オブジェクトを更新することになる場合があり、そのオブジェクトを無効化してしまう可能性があります。このパラメータの影響と、この新機能を設定して有効化する方法の詳細は、『Oracle Databaseリファレンス』を参照してください。 |
4,000バイト以上のサイズを宣言したVARCHAR2
データ型またはNVARCHAR2
データ型、または2,000バイト以上のサイズを宣言したRAW
データ型は、拡張データ型になります。拡張データ型の列は、OracleのLOBテクノロジを利用して表外に格納されます。LOB記憶域は、常に表と連動します。自動セグメント領域管理(ASSM)で管理された表領域の場合、拡張データ型の列はSecureFiles LOBとして格納されます。それ以外の場合は、BasicFiles LOBとして格納されます。記憶域メカニズムとしてのLOBは、内部使用に限定されています。そのため、これに該当するLOBは、DBMS_LOB
を使用して操作することはできません。
注意:
|
RAW
データ型に2,000バイトを超えるサイズを設定するには、MAX_STRING_SIZE
=
EXTENDED
を設定する必要がありますが、RAW
データ型は、そのサイズが4,000バイトを超える場合にのみ、表外LOBとして格納されることに注意してください。たとえば、RAW(3000)
のデータ型を宣言するには、MAX_STRING_SIZE
=
EXTENDED
を設定する必要があります。ただし、その列は表内に格納されます。
拡張データ型は、標準のデータ型と同様に使用できますが、次のような考慮事項があります。
拡張データ型の列に対して索引を作成するときや、索引で主キー制約または一意制約を適用する必要があるときの特別な考慮事項は、「拡張データ型の列に対する索引の作成」を参照してください。
リスト・パーティションのパーティション化キー列が拡張データ型の列の場合、パーティションに対して指定しようとする値のリストがパーティション・バウンドの制限(4KB)を超えていることがあります。この問題を回避する方法の詳細は、CREATE TABLEの「list_partitions」
句を参照してください。
初期化パラメータMAX_STRING_SIZE
の値が影響する項目は、次のとおりです。
テキスト・リテラルの最大長。詳細は、「テキスト・リテラル」を参照してください。
2つの文字列を連結した場合のサイズ制限。詳細は、「連結演算子」を参照してください。
NLSSORT
ファンクションから返される照合キーの長さ。「NLSSORT」を参照してください。
XMLFormat
オブジェクトの一部の属性のサイズ。詳細は、「XML書式モデル」を参照してください。
XMLファンクションのXMLCOLATTVAL、XMLELEMENT、XMLFOREST、XMLPI、およびXMLTABLEの一部の式のサイズ。
データベース内の各行にはアドレスがあります。次の項では、Oracle Databaseにおける行のアドレスの2つの書式について説明します。
Oracle Database固有のヒープ構成表内の行は、ROWIDという行のアドレスを持ちます。疑似列ROWID
を問い合せることによって、ROWIDの行のアドレスを調べることができます。この疑似列の値は、各行のアドレスを表す文字列です。文字列のデータ型はROWID
です。また、ROWID
データ型を持つ実際の列を含む表やクラスタを作成することもできます。Oracle Databaseでは、このような列の値が有効なROWIDであることは保証されません。ROWID疑似列の詳細は、第3章「疑似列」
を参照してください。
ROWIDには、次の情報が含まれています。
行を含むデータファイルのデータ・ブロック。この文字列の長さは、オペレーティング・システムによって異なります。
データ・ブロック内の行。
行を含むデータベース・ファイル。最初のデータファイルは1になります。この文字列の長さは、オペレーティング・システムによって異なります。
すべてのデータベース・セグメントに割り当てられる識別番号であるデータ・オブジェクト番号。データ・オブジェクト番号は、データ・ディクショナリ・ビューのUSER_OBJECTS
、DBA_OBJECTS
およびALL_OBJECTS
から取り出すことができます。同じセグメントを共有するオブジェクト(たとえば、同じクラスタ内のクラスタ化された表など)には、同じオブジェクト番号が付けられます。
ROWIDは、BASE 64の値で格納され、文字AからZ、aからz、0から9、プラス記号(+)およびスラッシュ(/)を含めることができます。ROWIDは、直接は使用できません。ROWIDの内容を解析するには、提供されているパッケージDBMS_ROWID
を使用します。パッケージ・ファンクションを使用すると、前述の4つのROWIDの要素に関する情報を抽出して利用できます。
関連項目: DBMS_ROWIDパッケージで使用できるファンクション、およびこのファンクションの使用方法については、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』 を参照してください。 |
物理アドレスまたは永続アドレス以外のアドレス、またはOracle Databaseが生成したものではないアドレスがある行を持つ表もあります。たとえば、索引構成表の行のアドレスは索引リーフに格納され、移動できます。外部キー表のROWID(たとえば、ゲートウェイを介してアクセスされるDB2)は、標準のOracle ROWIDではありません。
Oracleでは、ユニバーサルROWID(UROWID)を使用して索引構成表および外部キー表のアドレスを格納します。索引構成表には、論理UROWIDがあり、外部キー表には外部キーUROWIDがあります。いずれのタイプのUROWIDも、(ヒープ構成表の物理ROWIDのように)ROWID
疑似列に格納されます。
Oracleは、表の主キーに基づいて論理ROWIDを作成します。論理ROWIDは、主キーが変更されないかぎり、変更されません。索引構成表のROWID
疑似列のデータ型は、UROWID
です。この疑似列には、ヒープ構成表のROWID
疑似列と同様に(SELECT
... ROWID
文を使用して)アクセスできます。索引構成表のROWID
を格納する場合、表にUROWID
型の列を定義し、この列にROWID
疑似列の値を取り込みます。
表とクラスタを作成するSQL文では、ANSIデータ型、およびIBM社の製品SQL/DSとDB2のデータ型も使用できます。Oracleでは、Oracle Databaseのデータ型の名前と異なるANSIまたはIBMのデータ型の名前を認識します。データ型をOracleの同等のデータ型に変換して、Oracleのデータ型を列のデータ型の名前として記録し、次の表に示す変換に基づいて、Oracleのデータ型で列データを格納します。
表2-6 Oracleデータ型に変換されるANSIデータ型
ANSI SQLデータ型 | Oracleデータ型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
注意:
NUMERIC
データ型およびDECIMAL
データ型では、固定小数点数のみを指定できます。これらのデータ型では、位取りs
のデフォルトは0です。
FLOAT
データ型は、2進精度bを持つ浮動小数点数です。このデータ型のデフォルトの精度は、126桁の2進精度(38桁の10進精度)です。
DOUBLE PRECISION
データ型は126桁の2進精度を持つ浮動小数点数です。
REAL
データ型は63桁の2進精度(18桁の10進精度)を持つ浮動小数点数です。
次のSQL/DSとDB2のデータ型には、対応するOracleデータ型がありません。次のデータ型を持つ列は定義しないでください。
GRAPHIC
LONG
VARGRAPHIC
VARGRAPHIC
TIME
データ型がTIME
であるデータは、Oracleの日時データとしても表現できます。
表2-7 Oracleデータ型に変換されるSQL/DSとDB2のデータ型
SQL/DSとDB2データ型 | Oracleデータ型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
注意:
DECIMAL
データ型では、固定小数点数のみを指定できます。このデータ型では、s
のデフォルトは0です。
FLOAT
データ型はb
の2進精度を持つ浮動小数点数です。このデータ型のデフォルト精度は126桁の2進精度(38桁の10進精度)です。
ユーザー定義のデータ型は、Oracle組込みデータ型とその他のユーザー定義のデータ型を、アプリケーション内のデータの構造と動作をモデル化するオブジェクト型の構築ブロックとして使用します。次の項で、ユーザー定義型の様々なカテゴリを説明します。
関連項目:
|
オブジェクト型とは、実社会エンティティ(たとえば、発注書など)を抽象化し、アプリケーション・プログラムで処理できるようにしたものです。1つのオブジェクト型は、次の3種類のコンポーネントを持つスキーマ・オブジェクトです。
名前 - スキーマ内でオブジェクト型を一意に識別するためのものです。
属性 - 組込み型またはその他のユーザー定義型です。属性は、実社会エンティティの構造をモデル化します。
メソッド - PL/SQLで記述され、データベースに格納されるファンクションまたはプロシージャ、あるいはCやJavaなどの言語で記述され、外部に格納されるファンクションまたはプロシージャのことです。メソッドは、アプリケーションが実社会エンティティに対して実行できる操作を実装します。
オブジェクト識別子(キーワードOID
で表される)を使用することによって、オブジェクトを一意に識別し、他のオブジェクトまたはリレーショナル表からそのオブジェクトを参照できます。REF
と呼ばれるデータ型のカテゴリが、そのような参照を表します。REF
データ型は、オブジェクト識別子のコンテナです。REF
値は、オブジェクトへのポインタとなります。
REF
値が、存在しないオブジェクトを指している場合、そのREF
はDANGLING(参照先がない)状態であるといいます。DANGLING状態のREF
は、NULLであるREF
と異なります。REF
がDANGLING状態であるかどうかを確認するには、条件IS
[NOT
] DANGLING
を使用します。たとえば、列型がcustomer_typ
(属性cust_email
を持つ)を指しているREF
であるcustomer_ref
列があるとします。このcustomer_ref列を含むオブジェクト・ビューoc_orders
(サンプル・スキーマoe
内)は、次のように指定します。
SELECT o.customer_ref.cust_email FROM oc_orders o WHERE o.customer_ref IS NOT DANGLING;
配列とは、順序付けられたデータ要素の集合です。ある特定の配列のすべての要素は、同じデータ型です。各要素には索引があります。索引は、各要素の配列内での位置に対応する番号です。
配列内の要素数は、その配列のサイズを表します。Oracleの配列は可変サイズであるため、VARRAYと呼ばれます。VARRAYを宣言する場合は、最大サイズを指定する必要があります。
VARRAYの宣言時に領域は割り当てられません。ここでは次のような型を定義します。
リレーショナル表の列のデータ型
オブジェクト型属性
PL/SQLの変数、パラメータ、またはファンクションの戻り型
通常、Oracleは、1つの配列オブジェクトを表内に(その行の他のデータと同じ表領域に)、または表外に(LOBに)格納します。この形式は配列オブジェクトのサイズによって決まります。ただし、VARRAYに個別の記憶特性を指定する場合、Oracleはこれをサイズに関係なく表外に格納します。VARRAYの格納方法の詳細は、「CREATE TABLE」の「varray_col_properties」を参照してください。
ネストした表は、順序付けられていない要素の集合を表現します。要素には組込み型またはユーザー定義型を指定できます。ネストした表は、単一列の表として表示できます。ネストした表がオブジェクト型の場合、オブジェクト型のそれぞれの属性を表す複数列の表としても表示できます。
ネストした表の定義では、領域は割り当てられません。ネストした表では、次のものを宣言するための型を定義します。
リレーショナル表の列のデータ型
オブジェクト型属性
PL/SQLの変数、パラメータ、またはファンクションの戻り型
ネストした表が、リレーショナル表内の列型として使用される場合、またはオブジェクト表の基礎となるオブジェクト型の属性として使用される場合、Oracleは、ネストした表のすべてのデータを単一表に格納し、その単一表を、ネストした表を囲むリレーショナル表またはオブジェクト表に対応付けます。
Oracleは、組込み型またはANSIがサポートする型が不十分な場合に、新しい型を定義するためのSQLに基づくインタフェースを提供します。これらの型の動作は、C/C++、JavaまたはPL/SQLで実装されます。Oracle Databaseは、入出力、異機種間でのクライアント側の新しいデータ型へのアクセス、およびアプリケーションとデータベース間のデータ転送のための最適化で必要な下位レベルのインフラストラクチャ・サービスを自動的に提供します。
これらのインタフェースは、ユーザー定義(またはオブジェクト)型の作成に使用できます。また、Oracleが有効なデータ型を作成するときに使用します。このようなデータ型のいくつかはサーバーで提供され、横方向の幅広いアプリケーション領域(任意
型など)および縦方向の固有アプリケーション領域(Spatial型など)の両方に役立ちます。
Oracleが提供する型については、次の項で説明します。また、それらの型の実装および使用に関するドキュメントの参照先も示します。
任意
型は、実際の型が不明なプロシージャ・パラメータおよび表の列の柔軟性が高いモデリングを提供します。これらのデータ型によって、型の記述、データ・インスタンスおよびその他のSQL型の一連のデータ・インスタンスを動的にカプセル化し、アクセスできます。これらの型を構成およびアクセスするには、OCIおよびPL/SQLインタフェースを使用します。
eXtensible Markup Language(XML)は、World Wide Web Consortium(W3C)によって開発された、構造化されたデータおよび構造化されていないデータをWebで表示するための標準書式です。Universal Resource Identifiers(URI)は、WebページなどのWeb上のリソースを識別します。Oracleでは、データベース自体に格納されるデータにアクセスするためにDBURIRef
型と呼ばれるURIのクラスと同様に、XMLおよびURIデータを処理するための型が用意されています。また、データベースから外部URIおよび内部URIの両方に格納およびアクセスする型セットを利用できます。
Oracleが提供するこの型は、データベースでのXMLデータの格納および問合せに使用します。XMLType
は、XPath式を使用したXMLデータへのアクセス、抽出および問合せに使用するメンバー・ファンクションを持ちます。XPathは、XML文書をトラバースするためにW3Cによって開発された別の規格です。OracleのXMLType
ファンクションは、W3Cの多数のXPath式をサポートします。また、Oracleは、既存のリレーショナルまたはオブジェクト・リレーショナル・データからXMLType
値を作成するためのSQLファンクションおよびPL/SQLパッケージのセットを提供します。
XMLType
はシステム定義型であるため、ファンクションの引数として、あるいは表またはビューの列のデータ型として使用できます。また、XMLType
の表およびビューも作成できます。表にXMLType
列を作成する際は、XMLデータをCLOB
列に(内部的にはCLOB
として格納されるバイナリXMLとして)格納するか、またはオブジェクトと関連付けて格納するかを選択できます。
また、スキーマを登録し(DBMS_XMLSCHEMA
パッケージを使用)、登録したスキーマに適合する表または列を作成できます。この場合、XMLデータは、デフォルトでは基礎となるオブジェクト・リレーショナル列に格納されますが、スキーマ・ベースのデータであっても、CLOB
列またはバイナリXML列に格納するように指定できます。
XMLType
列の問合せおよびDMLは、格納メカニズムとは関係なく、同様に動作します。
関連項目: XMLType列の使用方法については、『Oracle XML DB開発者ガイド』を参照してください。 |
Oracleは、継承階層で関連するURI型のファミリ(URIType
、DBURIType
、XDBURIType
およびHTTPURIType
)を提供します。URIType
はオブジェクト型であり、その他はURIType
のサブタイプです。URIType
はスーパータイプであるため、この型の列を作成し、DBURIType
またはHTTPURIType
型のインスタンスをこの列に格納できます。
HTTPURIType HTTPURIType
を使用すると、外部のWebページまたはファイルのURLを格納できます。Oracleは、Hypertext Transfer Protocol(HTTP)を使用して、これらのファイルにアクセスします。
XDBURIType XDBURIType
を使用すると、表の任意のURIType
列に埋込み可能なURIとして、ドキュメントをXMLデータベース階層に展開できます。XDBURIType
は、URLで構成されています。URLは、参照先のXML文書の階層名と、XPath構文を表すオプションのフラグメントで構成されています。フラグメントとURL部分は、シャープ記号(#)で区切ります。次に、XDBURIType
の例を示します。
/home/oe/doc1.xml /home/oe/doc1.xml#/orders/order_item
DBURIType DBURIType
を使用すると、データベース内のデータを参照するDBURIRef
値を格納できます。DBURIRef
を格納することで、データベースの内部または外部に格納されたデータを参照し、常にデータにアクセスできます。
DBURIRef
値は、データベース内のデータを参照するために、XPathのような表現を使用します。データベースをXMLツリーに想定すると、表、行および列がXML文書の要素です。たとえば、サンプルの人事部門のユーザーhr
は次のようにXMLツリーで表します。
<HR> <EMPLOYEES> <ROW> <EMPLOYEE_ID>205</EMPLOYEE_ID> <LAST_NAME>Higgins</LAST_NAME> <SALARY>12008</SALARY> .. <!-- other columns --> </ROW> ... <!-- other rows --> </EMPLOYEES> <!-- other tables..--> </HR> <!-- other user schemas on which you have some privilege on..-->
DBURIRef
は、この仮想XML文書のXPath式です。したがって、従業員番号205の従業員のSALARY
値をEMPLOYEES
表で参照するには、DBURIRef
を次のように記述します。
/HR/EMPLOYEES/ROW[EMPLOYEE_ID=205]/SALARY
このモデルを使用すると、CLOB
列またはその他の列に格納されたデータを参照し、それらのデータを外部のURLとして外部の世界へ公開できます。
Oracleは、URIType
の様々なサブタイプのインスタンスを作成し、戻すことができるURIFactory
パッケージも提供します。このパッケージは、URL文字列を分析し、URLの種類(HTTP、DBURI
など)を識別し、サブタイプのインスタンスを作成します。DBURI
インスタンスを作成する場合は、URLの先頭に接頭辞/oradb
を付ける必要があります。たとえば、URIFactory.getURI('/oradb/HR/EMPLOYEES')
によってDBURIType
インスタンスが作成され、URIFactory.getUri('/sys/schema')
によってXDBURIType
インスタンスが作成されます。
関連項目:
|
Oracle Spatial and Graphは、位置情報アプリケーション、地理情報システム(GIS)・アプリケーションおよびジオイメージング・アプリケーションのユーザーが、空間データ管理をより簡単かつ自然に行えるように設計されています。一度空間データをOracle Databaseに格納すると、そのデータの操作や取得を簡単に行うことができ、データベースに格納された他のすべてのデータと関連付けることもできます。次のデータ型は、Spatial and Graphをインストールしている場合にのみ使用できます。
空間オブジェクトのジオメトリの記述は、ユーザー定義の表の単一行およびオブジェクト型SDO_GEOMETRY
の単一列に格納されます。SDO_GEOMETRY
型の列を含むすべての表は、表に対して一意の主キーを定義する別の列を持つ必要があります。このような表は、ジオメトリ表と呼ばれる場合があります。
SDO_GEOMETRY
オブジェクト型の定義は、次のとおりです。
CREATE TYPE SDO_GEOMETRY AS OBJECT (sgo_gtype NUMBER, sdo_srid NUMBER, sdo_point SDO_POINT_TYPE, sdo_elem_info SDO_ELEM_INFO_ARRAY, sdo_ordinates SDO_ORDINATE_ARRAY); /
この型はトポロジ・ジオメトリを記述します。この記述は、ユーザー定義の表の単一行およびオブジェクト型SDO_TOPO_GEOMETRY
の単一列に格納されます。
SDO_TOPO_GEOMETRY
オブジェクト型の定義は、次のとおりです。
CREATE TYPE SDO_TOPO_GEOMETRY AS OBJECT (tg_type NUMBER, tg_id NUMBER, tg_layer_id NUMBER, topology_id NUMBER); /
GeoRasterオブジェクト・リレーショナル・モデルでは、ラスター・グリッドまたはイメージ・オブジェクトは、ユーザー定義の表の単一行およびオブジェクト型SDO_GEORASTER
の単一列に格納されます。このような表は、GeoRaster表と呼ばれます。
SDO_GEORASTER
オブジェクト型の定義は、次のとおりです。
CREATE TYPE SDO_GEORASTER AS OBJECT (rasterType NUMBER, spatialExtent SDO_GEOMETRY, rasterDataTable VARCHAR2(32), rasterID NUMBER, metadata XMLType); /
関連項目: 空間データ型の完全な実装および使用のガイドラインは、Oracle Spatial and Graph開発者ガイド、Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイドおよびOracle Spatial and Graph GeoRaster開発者ガイドを参照してください。 |
Oracle Multimediaは、マルチメディア・データを記述するために、JavaまたはC++クラスに類似したオブジェクト型を使用します。これらのオブジェクト型のインスタンスは、メタデータおよびメディア・データを含む属性とメソッドで構成されます。Multimediaのデータ型は、ORDSYS
スキーマで作成されます。パブリック・シノニムがすべてのデータ型に対して存在するため、スキーマ名を指定せずにアクセスできます。
Oracle Multimediaでは、次のオブジェクト型が提供されます。
オーディオ・データの格納および管理をサポートします。
医用画像の規格として広く認知されている形式であるDigital Imaging and Communications in Medicine(DICOM)の格納および管理をサポートします。
オーディオ、イメージ、ビデオ・データなどすべての種類のメディア・データの格納および管理をサポートします。この型は、すべてのメディアを単一列に格納する場合に使用します。
イメージ・データの格納および管理をサポートします。
ビデオ・データの格納および管理をサポートします。
次のデータ型は、ISO-IEC 13249-5 Still Image規格(一般にSQL/MM StillImageと呼ばれる)に準拠しています。
イメージの平均の色によってそのイメージを特徴付けます。
色の値をカプセル化します。
RAWイメージのサンプルによって表示される色の相対頻度によって、イメージを特徴付けます。
前述したオブジェクト型(SI_AverageColor
、SI_ColorHistogram
、SI_PositionalColor
およびSI_Texture
)が表すイメージの特徴のうち最大4つの特徴を含むリストです。各特徴は、重み付けされます。
イメージをn
×m
個の四角形に分割すると考えた場合、SI_PositionalColor
オブジェクト型は、その四角形の最も重要なn
×m
個の色によってイメージを特徴付けます。
高さ、幅、フォーマットなどの固有のイメージ特性を持つデジタル・イメージを表します。
繰り返し出現している項目のサイズ(粗さ)、輝度の変化(コントラスト)および主な方向(方向性)によってイメージを特徴付けます。
関連項目:
|