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