Oracle编号(p)存储大小?

Oracle编号(p)存储大小?,oracle,numbers,size,storage,Oracle,Numbers,Size,Storage,我已经找过了,但我找不到我问题的最终答案 我需要知道Oracle中数字(p)字段的存储大小 示例:数字(1)、数字(3)、数字(8)、数字(10)等 参考,也可以是使用的存储取决于实际数值以及列精度和列的刻度 委员会: Oracle数据库以可变长度格式存储数字数据。每个值以科学记数法存储,1个字节用于存储指数。数据库最多使用20个字节来存储尾数,尾数是包含有效数字的浮点数的一部分。Oracle数据库不存储前导零和尾随零 委员会: 考虑到这一点,以字节为单位的列大小 数字数据值编号(p),其中p是

我已经找过了,但我找不到我问题的最终答案

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

示例:数字(1)、数字(3)、数字(8)、数字(10)等


参考,也可以是

使用的存储取决于实际数值以及列精度和列的刻度

委员会:

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

委员会:

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

ROUND((length(p)+s)/2))+1
其中,如果数字为正,则s等于零;如果 这个数字是负数

零和正负无穷大(仅在从导入时生成) 版本5(Oracle数据库)使用唯一表示进行存储。 零和负无穷大各需要1个字节;正无穷大 需要2个字节

如果您有权访问我的Oracle支持,更多信息请参见备注1031902.6


请注意,存储取决于值,即使它们都在
数字(10)
列中,而且两个3位数字可能需要不同的存储量。

Oracle中的
数字
数据类型是一种特殊的数据类型,其长度可变,类似于
varchar
。然后,如果将相同的数据存储在
number(5)
number(20)
中,则存储与将列声明为
varchar(100)
varchar(200)
相同

因此,在
number(p,s)
中指定p参数对存储大小没有影响,仅用于对数据应用约束。但是指定s参数可以通过舍入数据来减小大小


数字数据类型的最小存储大小为1字节,最大存储大小为21字节。因此,如果您不想应用约束,请使用不带p参数的数据类型。

谢谢您的回答。但是我如何计算一个三位数字占用多少字节呢?+1感谢您向我介绍
dump
函数!帮助我调试一些奇怪的Oracle(客户端库)错误。
ROUND((length(p)+s)/2))+1
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