Oracle NUMBER(p)存储大小?

ale*_*_pt 18 oracle size storage numbers

我已经搜索过了,但是我找不到我的问题的确凿答案......

我需要知道Oracle中数字(p)字段的存储大小是多少.

示例:NUMBER(1),NUMBER(3),NUMBER(8),NUMBER(10)等...

Ale*_*ole 36

使用的存储取决于实际数值,以及列的列精度和比例.

甲骨文11gR2的理念指导说:

Oracle数据库以可变长度格式存储数字数据.每个值都以科学记数法存储,1个字节用于存储指数.数据库最多使用20个字节来存储尾数,尾数是包含有效数字的浮点数的一部分.Oracle数据库不存储前导零和尾随零.

10gR2中引导更进一步:

考虑到这一点,特定数值数据值NUMBER(p)的列大小(以字节为单位),其中p是给定值的精度,可以使用以下公式计算:

ROUND((length(p)+s)/2))+1
Run Code Online (Sandbox Code Playgroud)

其中,如果数字为正数,则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 
Run Code Online (Sandbox Code Playgroud)

请注意,存储因值而异,即使它们都在一number(10)列中,并且两个3位数字可能需要不同的存储量.

  • +1感谢您向我介绍`dump`功能!帮助我调试一些奇怪的Oracle(客户端库)错误. (3认同)