6 データ型

この章では、Oracleで認識され、SQLで使用可能なデータ型について説明します。

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

データ型の概要

データ型は、特定のタイプの情報またはデータの分類です。Oracleが処理する値は、それぞれデータ型を持ちます。値のデータ型により、固定された一連のプロパティが値に関連付けられます。このプロパティに応じて、Oracleは、あるデータ型の値を別のデータ型の値と区別して扱います。

次に、Oracleが認識するデータ型を示します。

ANSIでサポートされているデータ型

{ CHARACTER [VARYING] (size)
| { CHAR | NCHAR } VARYING (size)
| VARCHAR (size)
| NATIONAL { CHARACTER | CHAR }
     [VARYING] (size)
| { NUMERIC | DECIMAL | DEC }
     [ (precision [, scale ]) ]
| { INTEGER | INT | SMALLINT }
| FLOAT [ (size) ]
| DOUBLE PRECISION
| REAL
}

Oracle組込みデータ型

{ character_datatypes
| number_datatypes
| long_and_raw_datatypes
| datetime_datatypes
| large_object_datatypes
| rowid_datatypes
}

Oracleが提供するデータ型

{ any_types
| XML_types
| spatial_types
| media_types
}

ユーザー定義データ型

ユーザー定義データ型は、Oracle組込みデータ型と、その他のユーザー定義データ型を使用して、アプリケーション内のデータの構造と動作をモデル化します。

関連項目:

データ・タイプの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

Oracle組込みデータ型

この項では、Oracle組込みデータ型の種類を示します。

character_datatypes

{ CHAR [ (size [ BYTE | CHAR ]) ]
| VARCHAR2 (size [ BYTE | CHAR ])
| NCHAR [ (size) ]
| NVARCHAR2 (size)
}

datetime_datatypes

{ DATE
| TIMESTAMP [ (fractional_seconds_precision) ]
     [ WITH [ LOCAL ] TIME ZONE ]
| INTERVAL YEAR [ (year_precision) ] TO MONTH
| INTERVAL DAY [ (day_precision) ] TO SECOND
     [ (fractional_seconds_precision) ]
}

large_object_datatypes

{ BLOB | CLOB | NCLOB | BFILE }

long_and_raw_datatypes

{ LONG | LONG RAW | RAW (size) }

number_datatypes

{ NUMBER [ (precision [, scale ]) ]
| FLOAT [ (precision) ]
| BINARY_FLOAT
| BINARY_DOUBLE
}

rowid_datatypes

{ ROWID | UROWID [ (size) ] }

データ型のコードは、Oracle Databaseが内部的に使用します。DUMPファンクションによって、列またはオブジェクト属性のデータ型コードが戻されます。

表6-1 組込みデータ型の概要

コード データ型 説明

1

VARCHAR2(size [BYTE | CHAR])

最大長がsizeバイトまたは文字の可変長文字列。VARCHAR2には、sizeを指定する必要があります。最小のsizeは1バイトまたは1文字です。最大のsizeは、次のとおりです。

  • MAX_STRING_SIZE = EXTENDEDの場合は、32,767バイト(文字)

  • MAX_STRING_SIZE = STANDARDの場合は、4,000バイト(文字)

MAX_STRING_SIZE初期化パラメータの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

BYTEは、列がバイト長セマンティクスを持つことを示します。CHARは、列がキャラクタ・セマンティクスを持つことを示します。

1

NVARCHAR2(size)

最大長がsize文字の可変長Unicode文字列。NVARCHAR2sizeを指定する必要があります。最大バイト数は、AL16UTF16エンコーディングの場合はsizeの2倍、UTF8エンコーディングの場合はsizeの3倍です。最大のsizeは、各国語文字セット定義によって決定されます。上限は次のとおりです。

  • 32767バイト(MAX_STRING_SIZE = EXTENDEDの場合)

  • 4000バイト(MAX_STRING_SIZE = STANDARDの場合)

MAX_STRING_SIZE初期化パラメータの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

2

NUMBER [ (p [, s]) ]

精度p、位取りsを持つ数。精度pには1から38の値を指定できます。位取りsには-84から127の値を指定できます。精度とスケールは両方とも10進数です。NUMBERの値は1から22バイトである必要があります。

2

FLOAT [(p)]

精度pを持つNUMBERデータ型のサブタイプ。FLOATの値は、内部的にNUMBERと表されます。精度pには1から126の2進数を指定できます。FLOATの値は1から22バイトである必要があります。

8

LONG

最大2GB(231から1を引いたバイト数)の可変長文字データ。下位互換性を維持するために提供されています。

12

DATE

紀元前4712年1月1日から紀元9999年12月31日までの日付を指定します。デフォルトの書式は、NLS_DATE_FORMATパラメータを使用すると明示的に、NLS_TERRITORYパラメータを使用すると暗黙的に決定される。サイズは7バイトに固定されています。このデータ型には、YEARMONTHDAYHOURMINUTEおよびSECONDの日時フィールドが含まれます。小数部の秒数およびタイムゾーンは含まれません。

100

BINARY_FLOAT

32ビットの浮動小数点数。このデータ型には4バイトが必要です。

101

BINARY_DOUBLE

64ビットの浮動小数点数。このデータ型には8バイトが必要です。

180

TIMESTAMP [(fractional_seconds_precision)]

日付の年、月、日および時刻の時、分、秒の値。fractional_seconds_precisionは、SECOND日時フィールドの小数部の桁数です。fractional_seconds_precisionの有効範囲は0から9です。デフォルトは6です。デフォルトの書式は、NLS_TIMESTAMP_FORMATパラメータによって明示的に決まるか、またはNLS_TERRITORYパラメータによって暗黙的に決まります。サイズは、精度に応じて7または11バイトです。このデータ型には、YEARMONTHDAYHOURMINUTEおよびSECONDの日時フィールドが含まれます。小数部の秒数は含まれますが、タイムゾーンは含まれません。

181

TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE

タイムゾーンによる時差などのすべてのTIMESTAMPの値。fractional_seconds_precisionは、SECOND日時フィールドの小数部の桁数です。0から9までの値を使用できます。デフォルトは6です。デフォルトの書式は、NLS_TIMESTAMP_FORMATパラメータによって明示的に決まるか、またはNLS_TERRITORYパラメータによって暗黙的に決まります。サイズは13バイトに固定されています。このデータ型には、YEARMONTHDAYHOURMINUTESECONDTIMEZONE_HOURおよびTIMEZONE_MINUTEの日時フィールドが含まれます。小数部の秒数および明示的なタイムゾーンが含まれます。

231

TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE

TIMESTAMP WITH TIME ZONEのすべての値。ただし、次に示す例外があります。

  • データベースへの格納時、データがデータベースのタイムゾーンに正規化されている場合。

  • データの検索時、ユーザーがセッションのタイムゾーンでデータを検索する場合。

デフォルトの書式は、NLS_TIMESTAMP_FORMATパラメータによって明示的に決まるか、またはNLS_TERRITORYパラメータによって暗黙的に決まります。サイズは、精度に応じて7または11バイトです。

182

INTERVAL YEAR [(year_precision)] TO MONTH

年および月で期間を格納。year_precisionは、YEAR日時フィールドの桁数です。0から9までの値を使用できます。デフォルトは2です。サイズは5バイトに固定されています。

183

INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)]

日、時、分および秒で期間を格納。

  • day_precisionは、DAY日時フィールドの最大桁数です。0から9までの値を使用できます。デフォルトは2です。

  • fractional_seconds_precisionは、SECONDフィールドの小数部の桁数です。0から9までの値を使用できます。デフォルトは6です。

サイズは11バイトに固定されています。

23

RAW(size)

長さsizeバイトのバイナリ・データ。RAW値には、size を指定する必要があります。最大のsizeは、次のとおりです。

  • 32767バイト(MAX_STRING_SIZE = EXTENDEDの場合)

  • 2000バイト(MAX_STRING_SIZE = STANDARDの場合)

MAX_STRING_SIZE初期化パラメータの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

24

LONG RAW

最大2GBの可変長バイナリ・データ。

69

ROWID

表の行のアドレスを一意に表すBASE64文字列。主に、ROWID疑似列によって戻される値のためのデータ型です。

208

UROWID [(size)]

索引構成表の行の論理アドレスを表すBASE64文字列。オプションのsizeは、UROWID型の列のサイズです。最大サイズおよびデフォルトは4000バイトです。

96

CHAR [(size [BYTE | CHAR])]

長さsizeバイトまたはsize文字の固定長文字データ。最大のsizeは2000バイトまたは文字です。デフォルトはsizeの最小値の1バイトです。

BYTEおよびCHARは、VARCHAR2と同じセマンティクスを持ちます。

96

NCHAR[(size)]

長さsize文字の固定長文字データ。バイト数は、AL16UTF16エンコードの場合はsizeの2倍まで、UTF8エンコードの場合はsizeの3倍までです。最大のsizeは、各国語文字セット定義(上限2000バイト)によって決定されます。デフォルトはsizeの最小値の1文字です。

112

CLOB

シングルバイト文字またはマルチバイト・キャラクタを含むキャラクタ・ラージ・オブジェクト。固定幅および可変幅の文字セットがサポートされ、両方ともデータベース文字セットで使用されます。最大サイズは、4GBから1を引いたバイト数にデータベース・ブロック・サイズを掛けた値です。

112

NCLOB

Unicodeキャラクタを含むキャラクタ・ラージ・オブジェクト。固定幅および可変幅の文字セットがサポートされます。両方の文字セットでデータベースの各国語文字セットを使用します。最大サイズは、4GBから1を引いたバイト数にデータベース・ブロック・サイズを掛けた値です。各国語文字セット・データが格納されます。

113

BLOB

バイナリ・ラージ・オブジェクト。最大サイズは、4GBから1を引いたバイト数にデータベース・ブロック・サイズを掛けた値です。

114

BFILE

データベース外に保存された大きなバイナリ・ファイルへロケータを格納。データベース・サーバー上に存在する外部LOBへのバイト・ストリームI/Oアクセスを可能にします。最大サイズは4GBです。

関連項目:

組込みデータ型の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

Oracleが提供するデータ型

この項では、Oracleが提供するデータ型の構文を示します。

any_types

{ SYS.AnyData | SYS.AnyType | SYS.AnyDataSet }

spatial_types

{ SDO_Geometry | SDO_Topo_Geometry |SDO_GeoRaster }

XML_types

{ XMLType | URIType }

Oracleデータ型への変換

表とクラスタを作成するSQL文では、ANSIデータ型、およびIBM社の製品SQL/DSとDB2のデータ型も使用できます。Oracleでは、Oracleデータ型の名前と異なるANSIまたはIBMのデータ型の名前を認識し、列のデータ型の名前として記録します。その後、次の表に示す変換に基づいて、Oracleのデータ型で列データを格納します。

表6-2 Oracleデータ型に変換されるANSIデータ型

ANSI SQLデータ型 Oracleデータ型

CHARACTER(n)

CHAR(n)

CHAR(n)

CHARACTER VARYING(n)

CHAR VARYING(n)

VARCHAR2(n)

NATIONAL CHARACTER(n)

NATIONAL CHAR(n)

NCHAR(n)

NCHAR(n)

NATIONAL CHARACTER VARYING(n)

NATIONAL CHAR VARYING(n)

NCHAR VARYING(n)

NVARCHAR2(n)

NUMERIC[(p,s)]

DECIMAL[(p,s)](ノート1)

NUMBER(p,s)

INTEGER

INT

SMALLINT

NUMBER(38)

FLOAT (ノート2)

DOUBLE PRECISION (ノート3)

REAL (ノート4)

FLOAT(126)

FLOAT(126)

FLOAT(63)

ノート:

  1. NUMERICデータ型およびDECIMALデータ型では、固定小数点数のみを指定できます。これらのデータ型では、位取りsのデフォルトは0です。

  2. FLOATデータ型は、2進精度bを持つ浮動小数点数です。このデータ型のデフォルト精度は、126桁の2進精度または38桁の10進精度です。

  3. DOUBLE PRECISIONデータ型は126桁の2進精度を持つ浮動小数点数です。

  4. REALデータ型は63桁の2進精度(18桁の10進精度)を持つ浮動小数点数です。

次のSQL/DSとDB2のデータ型には、対応するOracleデータ型がありません。次のデータ型を持つ列は定義しないでください。

  • GRAPHIC

  • LONG VARGRAPHIC

  • VARGRAPHIC

  • TIME

データ型がTIMEであるデータは、Oracleの日時データとしても表現できます。

関連項目:

データ型の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。