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

PolarDB:数値型

最終更新日:May 24, 2024

数値型は、4 バイト整数、4 バイトと 8 バイトの浮動小数点数、および固定精度の 10 進数です。

下表に使用可能な数値型を示します。

表1. 数値型
データ型ストレージサイズ説明範囲
BINARY INTEGER4 バイト署名された整数。 INTEGERのエイリアスです。 -2,147,483,647に2,147,483,648
DOUBLE PRECISION8 バイト可変精度。 このデータ型は不正確です。 小数点以下 15 桁の精度
INTEGER4 バイト整数の典型的な選択。 -2,147,483,647に2,147,483,648
NUMBER変数ユーザー指定の精度。 このデータ型は正確です。 最大1,000桁の精度
NUMBER(p [, s ] )変数最大精度pとオプションのスケールsの正確な数。 最大1,000桁の精度
PLS INTEGER4 バイト署名された整数。 INTEGERのエイリアスです。 -2,147,483,647に2,147,483,648
REAL4 バイト可変精度。 このデータ型は不正確です。 小数点以下 6 桁の精度
ROWID8 バイト符号付き8バイト整数。 -9223372036854775808 から 9223372036854775807
SMALLINT2バイト小さな範囲内の整数。 -32767に32768
BIGINT8 バイト広い範囲内の整数。 -9223372036854775808 から 9223372036854775807
DECIMAL可変長。ユーザー指定の精度。 このデータ型は正確です。 小数点の前の131072桁から小数点の後の16383桁まで。
NUMERIC可変長。ユーザー指定の精度。 このデータ型は正確です。 小数点の前の131072桁から小数点の後の16383桁まで。
SMALLSERIAL2バイト2バイトの整数。 1から32767
シリアル4 バイト自動インクリメントの整数。 1から2147483647
ビッグシリーズ8 バイト大きい自動インクリメント整数。 1から9223372036854775807

整数型

INTEGERタイプは、-2,147,483,648から2,147,483,647までの分数成分を含まない整数を格納します。 許容範囲外の値を格納しようとすると、エラーが発生します。

SMALLINTは通常、ディスク容量が少ない場合にのみ使用されます。 BIGINTはINTEGERの値の範囲を超えた場合にのみ使用されます。

ROWID 型の列は、レコードの物理アドレスを記述する固定長のバイナリデータを保持します。 ROWID は符号なしの 4 バイト INTEGER であり、0 から 4,294,967,295 の間の値を小数コンポーネントなしで格納します。 許容範囲外の値を格納しようとすると、エラーが発生します。

任意の精度数値型

NUMBER 型は、実質的に無制限の桁数の精度を格納でき、正確に計算を実行することができます。 金額やその他の数量の保管など、正確さが必要な場合に推奨されます。 ただし、NUMBER 型は、次のセクションで説明する浮動小数点型と比較して非常に低速です。

NUMBER のスケールは、小数点の右側の小数部分の桁数です。 NUMBER の精度は、整数の有効桁の合計数、つまり小数点の両側の桁数です。 したがって、数値 23.5141 の精度は 6 で、スケールは 4 です。 整数はゼロのスケールを持つと考えることができます。

NUMBER 型の精度とスケールの両方を設定することができます。 以下の構文を使用して、NUMBER 型の列を宣言します。

番号 (精度、スケール)

精度は正で、スケールはゼロまたは正とする必要があります。 構文は次のとおりです。

番号 (精度)

スケール 0 を選択します。 精度またはスケールを指定せずに NUMBER を指定すると、精度の実装限界まで、任意の精度およびスケールの数値を格納できる列が作成されます。 この種類の列は入力値を特定のスケールに強制変換しませんが、宣言されたスケールを持つ NUMBER 列は入力値をそのスケールに強制変換します。 SQL 標準では、デフォルトのスケールが 0 である必要があります。たとえば、整数の精度に強制変換されます。 最大限の移植性を確保にするには、精度とスケールを明示的に指定することが最善です。

値の精度またはスケールが、宣言された列の精度またはスケールより大きい場合は、システムは値を丸めようとします。 宣言された制限を満たすために値を丸めることができない場合、エラーが発生します。

NUMERICとDECIMALはNUMBERに相当します。

浮動小数点型

REAL および DOUBLE PRECISION データ型は、不正確な可変精度数値型です。 実際には、これらの型は通常、基になるプロセッサ、オペレーティングシステム、およびコンパイラがサポートする範囲で、2 進浮動小数点演算 (それぞれ単精度および倍精度) の IEEE 標準 754 を実装したものです。

不正確とは、一部の値が内部形式に正確に変換されず、近似値として保存されることを意味します。

そのため、保存および出力された値にはわずかな差異が見られる場合があります。 これらの誤差を管理し、それらが計算に与える影響については、数学およびコンピュータサイエンス全分野の主題であり、以下の点を除いて説明を省略します。

正確な値の保管との計算が必要な場合 (金額の計算など) は、代わりに NUMBER 型をご使用ください。

重要な事項についてこれらの型を使用して複雑な計算を実行する場合、特に無限大やアンダーフローなどの境界の場合の特定の動作に依存する場合、実装を慎重に評価する必要があります。

2 つの浮動小数点値が等しいかどうかを比較しても、期待どおりに機能しない場合があります。 ほとんどのプラットフォームでは、REAL 型の範囲は少なくとも 1E-37 から 1E+37 で、精度は少なくとも小数点以下 6 桁です。 DOUBLE PRECISION 型は通常、1E-307 から 1E+308 までの範囲で、15 桁以上の精度があります。 値が大きすぎる、または小さすぎる場合、エラーが発生します。 入力数値の精度が高すぎる場合、丸めが行われることがあります。 ゼロとは異なり、表現できないゼロに近い数値は、アンダーフローエラーの原因になります。

POLARDBは、不正確な数値型を指定するためのSQL標準表記FLOATおよびFLOAT(p) もサポートしています。 ここで、p は 2 進数で最小許容精度を指定します。 POLARDBは、FLOAT(1) 〜FLOAT(24) をREALタイプの選択として受け入れ、FLOAT(25) 〜FLOAT(53) をDOUBLE PRECISIONの選択として受け入れる。 許容範囲を超える p の値はエラーとなります。 精度が指定されていない FLOAT は、DOUBLE PRECISION 型として扱われます。

シリアルタイプ

SMALLSERIAL、SERIAL、およびBIGSERIALは真の数値型ではありませんが、テーブルに一意の識別子を作成するための概念的な便利さです。 これらは他のデータベースのAUTO_INCREMENT属性に似ており、次のステートメント
を使用して作成できます。colnameシリアル
); 
上記のステートメントは、次のステートメントと同等です。
CREATE SEQUENCE tablename_colname_seq;
テーブルタブ名を作成する (
colname整数NOT NULL DEFAULT nextval('tablename_colname_seq ')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname; 
したがって、整数フィールドが導入され、そのデフォルト値がシーケンスジェネレータから読み取られます。 NOT NULL制約は、NULLが挿入されないことを保証するために適用される。 ほとんどの場合、誤って重複した値を挿入しないようにUNIQUEまたはPRIMARY KEY制約をアタッチできますが、これは自動ではありません。 整数フィールドの配下にシーケンサージェネレータを設定した場合、フィールドまたはテーブルを削除するとシーケンサージェネレータは削除されます。
説明 SMALLSERIAL、SERIAL、およびBIGSERIALはシーケンスを使用して実装されるため、列内の値は削除されなくても離散的である可能性があります。 シーケンスによって割り当てられた値を含む行がテーブルに挿入されない場合でも、シーケンスによって割り当てられた値は消費されます。 たとえば、これは、挿入トランザクションがロールバックされた場合に発生します。

シーケンスの次の値をSERIALlフィールドに挿入するときは、SERIALフィールドにデフォルト値を割り当てる必要があります。 これは、INSERTステートメントのフィールドリストからフィールドを除外するか、DEFAULTキーワードを使用して実装できます。

SERIAL1とSERIAL14は同等であり、両方ともINTEGERフィールドを作成するために使用できます。 BIGSERIALとSERIAL18は同等ですが、BIGSERIALはBIGINTフィールドを作成します。 テーブルの有効期間にわたって2つを超える31識別子を使用できる場合は、BIGSERIALを選択する必要があります。 SMALLSERIALとSERIAL2は同等ですが、SMALLSERIALはSMALLINTフィールドを作成します。

SERIAL型のシーケンスは、そのフィールドが削除されると自動的に削除されます。 シーケンスだけを削除してフィールドを残すことはできますが、フィールドのデフォルト値式はこの方法でも削除されます。