web-dev-qa-db-ja.com

Oracle NUMBER(p)ストレージサイズ?

私はそれを検索しましたが、私の質問に対する決定的な答えが見つかりません...

Oracleのnumber(p)フィールドのストレージサイズを知る必要があります。

例:NUMBER(1)、NUMBER(3)、NUMBER(8)、NUMBER(10)など...

18
alex_pt

使用されるストレージは、実際の数値、および列の精度と列のスケールによって異なります。

Oracle 11gR2コンセプトガイドによる

Oracle Databaseは、数値データを可変長形式で格納します。各値は科学表記法で保存され、1バイトが指数の保存に使用されます。データベースは、最大20バイトを使用して仮数を格納します。仮数は、有効数字を含む浮動小数点数の一部です。 Oracle Databaseでは、先頭と末尾のゼロは保存されません。

10gR2ガイドはさらに先へ

これを考慮すると、特定の数値データ値NUMBER(p)のバイト単位の列サイズ(pは特定の値の精度)は、次の式を使用して計算できます。

_ROUND((length(p)+s)/2))+1
_

ここで、数値が正の場合、sはゼロに等しく、数値が負の場合、sは1に等しくなります。

ゼロおよび正および負の無限大(バージョン5 Oracleデータベースからのインポート時にのみ生成)は、一意の表現を使用して保存されます。ゼロおよび負の無限大にはそれぞれ1バイトが必要です。正の無限大には2バイトが必要です。

My Oracle Supportにアクセスできる場合は、ノート1031902.6に詳細情報があります。

vsizeまたはdumpで使用される実際のストレージを確認できます

_create table t42 (n number(10));

insert into t42 values (0);
insert into t42 values (1);
insert into t42 values (-1);
insert into t42 values (100);
insert into t42 values (999);
insert into t42 values (65535);
insert into t42 values (1234567890);

select n, vsize(n), dump(n)
from t42
order by n;

          N   VSIZE(N)                           DUMP(N) 
------------ ---------- ---------------------------------
         -1          3           Typ=2 Len=3: 62,100,102 
          0          1                  Typ=2 Len=1: 128 
          1          2                Typ=2 Len=2: 193,2 
        100          2                Typ=2 Len=2: 194,2 
        999          3           Typ=2 Len=3: 194,10,100 
      65535          4          Typ=2 Len=4: 195,7,56,36 
 1234567890          6   Typ=2 Len=6: 197,13,35,57,79,91 
_

すべてnumber(10)列にあるにもかかわらず、ストレージは値に応じて変化し、2つの3桁の数値が異なるストレージ量を必要とする場合があることに注意してください。

35
Alex Poole

Oracleのnumberデータ型は、varcharのような可変長の特別なデータ型です。次に、同じデータをnumber(5)number(20)に格納する場合、ストレージはvarchar(100)varchar(200)として列を宣言するのと同じです。

したがって、number(p,s)でpパラメーターを指定しても、ストレージサイズには影響せず、データに制約を適用するためだけです。ただし、sパラメーターを指定すると、データを丸めてサイズを小さくすることができます。

数値データ型の最小ストレージサイズは1バイトで、最大は21バイトです。したがって、制約を適用したくない場合は、pパラメーターなしでnumberデータ型を使用します。

2
NUMBER  
999...(38 9's) x10125 
maximum value   Can be represented to full 38-digit precision (the mantissa).

-999...(38 9's) x10125 
minimum value   Can be represented to full 38-digit precision (the mantissa).


Precision   38 significant digits    ==> NUMBER(38) is the max

here を参照し、 here の場合もあります

1