すべてのプロダクト
Search
ドキュメントセンター

PolarDB:数値型

最終更新日:Mar 29, 2026

PolarDB for Oracle では、整数型、任意精度数値型、浮動小数点型、およびシーケンス型の 4 つのカテゴリの数値型をサポートしています。

データ型ストレージサイズ説明範囲
BINARY INTEGER4 バイト符号付き整数。INTEGER のエイリアスです。-2,147,483,648 ~ 2,147,483,647
DOUBLE PRECISION8 バイト可変精度(不正確)。15 桁の 10 進精度
INTEGER4 バイト標準的な整数型です。-2,147,483,648 ~ 2,147,483,647
NUMBER可変ユーザー指定の精度(正確)。最大 1,000 桁の精度
NUMBER(p [, s])可変最大精度 p、オプションのスケール s を持つ正確な数値型です。最大 1,000 桁の精度
PLS INTEGER4 バイト符号付き整数。INTEGER のエイリアスです。-2,147,483,648 ~ 2,147,483,647
REAL4 バイト可変精度(不正確)。6 桁の 10 進精度
ROWID8 バイト符号付き 8 バイト整数です。-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
SMALLINT2 バイト小範囲の整数です。-32,768 ~ 32,767
BIGINT8 バイト大範囲の整数です。-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
DECIMAL可変ユーザー指定の精度(正確)。小数点左側最大 131,072 桁、右側最大 16,383 桁
NUMERIC可変ユーザー指定の精度(正確)。小数点左側最大 131,072 桁、右側最大 16,383 桁
SMALLSERIAL2 バイト自動インクリメントされる 2 バイト整数です。1 ~ 32,767
SERIAL4 バイト自動インクリメントされる 4 バイト整数です。1 ~ 2,147,483,647
BIGSERIAL8 バイト自動インクリメントされる 8 バイト整数です。1 ~ 9,223,372,036,854,775,807

整数型

INTEGER は -2,147,483,648 ~ 2,147,483,647 の範囲の整数を格納します。この範囲外の値を挿入するとエラーが発生します。

ディスク領域が極めて限られている場合にのみ SMALLINT を使用してください。INTEGER の範囲を超える値を扱う必要がある場合にのみ BIGINT を使用してください。

ROWID 列には、行の物理アドレスが固定長バイナリデータとして格納されます。表中の記述では ROWID が符号付き 8 バイト整数として示されていますが、実際には 0 ~ 4,294,967,295 の範囲の符号なし 4 バイト整数を格納します。この範囲外の値を挿入するとエラーが発生します。

任意精度数値型

NUMBER は事実上無制限の精度で数値を格納し、正確な計算を実行します。金銭的金額など、精度の損失が許容されない値には NUMBER を使用してください。ただし、NUMBER は次のセクションで説明する浮動小数点型と比較して、著しく処理速度が遅くなります。

精度とスケール — NUMBER の精度とは、小数点の左右両側を含めた有効数字の総桁数を指します。スケールとは、小数点右側の桁数を指します。たとえば、23.5141 は精度が 6、スケールが 4 です。整数のスケールは 0 です。

NUMBER 列は、以下のいずれかの形式で宣言します。

NUMBER(精度, スケール)
NUMBER(精度)          -- スケールはデフォルトで 0
NUMBER                     -- 実装による制限まで、任意の精度およびスケールを受け入れます

精度は正の値である必要があります。スケールは 0 以上である必要があります。

スケールが明示的に宣言された NUMBER 列では、入力値がそのスケールに強制的に丸められます。一方、精度およびスケールが指定されていない NUMBER 列では、入力値は丸められません。最大限の移植性を確保するためには、精度およびスケールを明示的に指定することを推奨します。

入力値が宣言された精度またはスケールを超えている場合、PolarDB はその値を四捨五入します。四捨五入しても格納できない場合は、エラーが発生します。

例: NUMBER(3, 1) と宣言された列では、値が小数点第 1 位まで四捨五入され、-99.9 ~ 99.9 の範囲の値を受け入れます。

NUMERIC および DECIMAL は NUMBER と等価です。

浮動小数点型

REAL および DOUBLE PRECISION は、不正確で可変精度の型です。これらは、基盤となるプロセッサ、オペレーティングシステム、およびコンパイラの機能に応じて、IEEE 標準 754 に基づくバイナリ浮動小数点演算(それぞれ単精度および倍精度)を実装します。

不正確とは、一部の値が内部フォーマットに正確に変換できず、近似値として格納されることを意味します。そのため、値の格納および取得時にわずかな差異が生じる可能性があります。浮動小数点型を使用する際は、以下の点に注意してください。

  • 金銭的金額など、正確な格納および計算が必要な場合は、代わりに NUMBER を使用してください。

  • 無限大やアンダーフローなど境界動作が重要な複雑な計算を行う場合は、実装を十分に評価したうえで使用してください。

  • 2 つの浮動小数点値を等価で比較しても、期待通りの結果が得られない場合があります。

ほとんどのプラットフォームでは、REAL の有効値は少なくとも 1E-37 ~ 1E+37、精度は少なくとも 6 桁です。DOUBLE PRECISION の有効値は通常約 1E-307 ~ 1E+308、精度は少なくとも 15 桁です。有効値の範囲を超える値を挿入するとエラーが発生します。有効数字が多すぎる入力値は四捨五入されます。ゼロと区別できないほどゼロに近い値を挿入すると、アンダーフロー・エラーが発生します。

PolarDB では、SQL 標準の表記である FLOAT および FLOAT(p) もサポートしており、p は、2 進数における最小許容精度(ビット数)を指定します。

FLOAT 表記対応する型
FLOAT(1)FLOAT(24)REAL
FLOAT(25)FLOAT(53)DOUBLE PRECISION
FLOAT(精度未指定)DOUBLE PRECISION

p の値がサポート範囲外の場合、エラーが発生します。

シリアル型

SMALLSERIAL、SERIAL、BIGSERIAL は、厳密には数値型ではありません。これらは、他のデータベースにおける AUTO_INCREMENT と同様に、一意の識別子列を作成するための簡便なショートハンドです。

以下の宣言:

CREATE TABLE tablename (
    colname SERIAL
);

は、以下と等価です。

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
    colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;

これにより、NOT NULL 制約を持つ整数列が作成され、そのデフォルト値はシーケンスジェネレーターから取得されます。重複値を防止する必要がある場合は、別途 UNIQUE 制約または PRIMARY KEY 制約を追加してください。

行を挿入する際には、SERIAL 列に次のシーケンス値を割り当てるために、列リストから該当列を省略するか、DEFAULT キーワードを使用します。

型の等価関係:

短縮形等価な型作成される列の型
SERIAL / SERIAL4SERIALINTEGER
BIGSERIAL / SERIAL8BIGSERIALBIGINT
SMALLSERIAL / SERIAL2SMALLSERIALSMALLINT

テーブルの寿命中に生成される識別子の数が 2^31 を超える可能性がある場合は、BIGSERIAL を使用してください。

SERIAL 列を削除すると、その基盤となるシーケンスも自動的に削除されます。一方、シーケンスのみを削除した場合、列自体は残りますが、デフォルト値式は失われます。

説明

SERIAL 型は内部的にシーケンスを使用しているため、行が削除されていない場合でも、SERIAL 列の値は連続しないことがあります。シーケンス値は割り当て時に消費されます。挿入トランザクションがロールバックされた場合、その値は再利用されません。