Oracleのデータ型一覧

Oracleのデータ型一覧
分類 データ型 説明
文字列 CHAR 固定長の文字列
LONG 2ギガバイトまでの可変長文字列
NCHAR 固定長のUnicode文字列
NVARCHAR2 可変長のUnicode文字列
VARCHAR VARCHAR2と同じ
VARCHAR2 可変長の文字列
数値 NUMBER 数値
BINARY_FLOAT 単精度浮動小数点数
BINARY_DOUBLE 倍精度浮動小数点数
日付と時刻 DATE 日付と時刻
TIMESTAMP 日付と時刻(ミリ秒)
INTERVAL YEAR TO MONTH 2つの日付の差分
INTERVAL DAY TO SECOND 2つの日付と時刻の差分
バイナリ RAW バイナリデータ
LONG RAW 可変長のバイナリデータ
ラージオブジェクト CLOB キャラクタ型ラージオブジェクト
NCLOB Unicodeキャラクタ型ラージオブジェクト
BLOB バイナリ型ラージオブジェクト
その他 ROWID 行識別子
BFILE データベース外のバイナリファイル

なお、オラクルデータベースのSQLにBoolean型は存在しない。

CHAR

CHARは固定長文字列を格納するデータ型です。

CHAR
CHAR(len)
CHAR(len BYTE)
CHAR(len CHAR)
len

文字列の長さを指定する。

BYTE

len はバイト数での指定となる。

CHAR

len は文字数での指定となる。

LONG

LONGは最大2ギガバイトまでの可変長文字列を格納するデータ型である。古いデータ型だが、後方互換性のため現在でも使える。LONGデータ型にはさまざまな制約があるため、新たに表を作る場合はLONG型の列を含めない方がよい。

LONGデータ型には次のような制約がある。

NCHAR

NCHARは固定長のUnicode長文字列を表すデータ型である。

NCHAR(len)
len

文字列の長さを文字数で指定する。

NVARCHAR2

NVARCHAR2は可変長のUnicode文字列を表すデータ型である。NVARCHAR2のキャラクタセットはAL16UTF16又はUTF8のいずれかのみである。

NVARCHAR2(maxlen)
maxlen

文字列の最大長を文字数で指定する。

VARCHAR2

VARCHAR2は可変長文字列を格納するデータ型である。

VARCHAR2(maxlen)
VARCHAR2(maxlen BYTE)
VARCHAR2(maxlen CHAR)
maxlen
文字列の最大長を1から4000の範囲で指定する。指定した長さの単位は、次の優先順位で決められる。
  1. BYTE修飾子又はCHAR修飾子によって明示的に指定された長さセマンティクス
  2. ALTER SESSION文によって指定されたnls_length_semantics
  3. Oracleクライアント側の環境変数によって設定されたNLS_LENGTH_SEMANTICS
  4. 初期化パラメータによって設定されたnls_length_semantics
  5. デフォルト(BYTE)
BYTE
文字列の最大長をバイト数で指定する。
CHAR
文字列の最大長を文字数で指定する。

Oracle SQLでは、文字列リテラルの最大長は4,000バイトである。この制限により、VARCHAR2(4000 CHAR)に4,000バイトを超える文字列を指定してINSERTしようとすると、「ORA-01740: 文字列リテラルが長すぎます」のエラーが発生する。つまり、日本語などの2バイト文字では実際に4,000文字を格納できるわけではない。

NUMBER

精度とスケールが指定された数値を格納するデータ型です。

NUMBER
NUMBER(precision)
NUMBER(precision, scale)
precision
精度(桁数)を 1 から 38 までの範囲で指定する。precision を省略した場合、精度は 38 桁となる。
scale
スケールを -84 から 127 までの範囲で指定する。スケールが正の値の場合、その値が小数点以下の桁数となる。たとえば、NUMBER(5,2) は 0 および 0.01 ~ 999.99 までの数値を扱える。
スケール
正の最小値 最大値
NUMBER(5,-3) 1000 99999000
NUMBER(5,-2) 100 9999900
NUMBER(5,-1) 10 999990
NUMBER(5,0) 1 99999
NUMBER(5,1) 0.1 9999.9
NUMBER(5,2) 0.01 999.99
NUMBER(5,3) 0.001 99.999

BINARY_FLOAT

BINARY_FLOATは32ビットの浮動小数点数を格納するデータ型です。

BINARY_FLOAT

BINARY_DOUBLE

BINARY_DOUBLEは64ビットの浮動小数点数を格納するデータ型です。

BINARY_DOUBLE

DATE

日付と時刻を格納するデータ型で、西暦9999年12月31日までの日付を格納することができる。

書式はYYYY-MM-DD HH:MM:SSである。

DATE

DATE型を検索条件に指定する。日時を表す文字列からDATE型を生成するには、TO_DATE関数を使う。

SELECT * FROM emp WHERE hiredate >= TO_DATE('2014/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS')

DATE型を「YYYYMMDD」形式の文字列に変換する。DATE型から文字列に変換するには、TO_CHAR関数を使う。

SELECT TO_CHAR(hiredate, 'YYYYMMDD') FROM emp;

TIMESTAMP

日付と時刻を格納するデータ型です。書式は YYYY-MM-DD HH:MM:SS [FFFFFFFFF] です。

TIMESTAMP[(fractional_seconds)] [WITH [LOCAL] TIMEZONE]

秒の小数点以下の桁数を fractional_seconds で指定することができます。指定できる範囲は、1 ≦ fractional_seconds ≦ 9 です。 fractional_seconds を省略した場合、6桁となります。

日付と時刻に加えてタイムゾーンに関する情報を含めるには、WITH TIMEZONEまたはWITH LOCAL TIMEZONEを指定します。

INTERVAL YEAR TO MONTH

日付の差分(年と月)の差分を格納するデータ型です。

INTERVAL YEAR[(year_precision)] TO MONTH

精度を year_precision で指定することができます。指定できる範囲は、0 ≦ year_precision ≦ 9 です。 year_precision を省略した場合、精度は2桁となります。

INTERVAL DAY TO SECOND

日付と時刻の差分(日、時間、分、秒)を格納するデータ型です。

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

日の精度を day_precision で指定することができます。指定できる範囲は、0 ≦ day_precision ≦ 9 です。 day_precision を省略した場合、精度は2桁となります。

秒の小数点以下の桁数を fractional_seconds で指定することができます。指定できる範囲は、0 ≦ fractional_seconds ≦ 9 です。 fractional_seconds を省略した場合、精度は6桁となります。

RAW

バイナリ・データを格納するデータ型です。

RAW[(size)]

LONG RAW

可変長バイナリ・データを格納するデータ型です。

LONG RAW

最大サイズは2GBです。

CLOB

キャラクタ・ラージ・オブジェクトを格納するデータ型です。

CLOB

最大サイズは、4GB -1 にデータベース・ブロックサイズを掛けた値です。

NCLOB

Unicodeキャラクタを含むキャラクタ・ラージ・オブジェクトを格納するデータ型です。

NCLOB

最大サイズは、4GB -1 にデータベース・ブロックサイズを掛けた値です。

BLOB

バイナリ・ラージ・オブジェクトを格納するデータ型です。

BLOB

最大サイズは、4GB -1 にデータベース・ブロックサイズを掛けた値です。

ROWID

索引構成表の論理アドレスを表すBASE64文字列を格納するデータ型です。

ROWID[(size)]

最大サイズを size で指定することができます。

BFILE

データベース外に保存される大きなバイナリ・ファイルへのロケータを格納するデータ型です。

BFILE

最大サイズは4GBです。

データ型を確認する

テーブルの列のデータ型を確認するには、SQL*PlusのDESCRIBEコマンドを実行する。

ANSI SQLとOracleのデータ型の違い

ANSI SQLデータ型とOracleデータ型とでは多少異なります。両者の違いを次に示します。

ANSI SQLデータ型 Oracleデータ型
CHARACTER(n)
CHAR(n)
CHAR(n)
CHARACTER VARYING(n)
CHAR VARYING(n)
VARCHAR(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)
NUMBER(p,s)
INTEGER
INT
SMALLINT
NUMBER(38)
FLOAT
DOUBLE PRECISION
REAL
NUMBER