我搜索了一下,但是没有找到对我的问题的确切答案...
我需要知道Oracle中数字(p)字段的存储大小。
例如:NUMBER(1),NUMBER(3),NUMBER(8),NUMBER(10)等...
存储使用量取决于实际数值,以及列的精度和比例。
根据Oracle 11gR2概念指南,Oracle数据库以可变长度格式存储数字数据。每个值都以科学计数法存储,使用1个字节来存储指数。数据库最多使用20个字节来存储尾数,即包含有效数字的浮点数的部分。Oracle数据库不存储前导零和尾随零。
考虑到这一点,对于特定数字数据值NUMBER(p),其中p是给定值的精度,可以使用以下公式计算列大小(以字节为单位):
ROUND((length(p)+s)/2))+1
如果数字为正数,则s等于零,如果数字为负数,则s等于1。
零、正无穷和负无穷(仅在从版本5的Oracle数据库导入时生成)使用唯一表示法存储。零和负无穷每个需要1字节;正无穷需要2字节。
如果您可以访问My Oracle Support,则可以在笔记1031902.6中获得更多信息。
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)
列中,两个三位数可能需要不同数量的存储空间。
number
数据类型是一种特殊的数据类型,与varchar
一样具有可变长度。如果您将相同的数据存储在number(5)
和number(20)
中,则存储大小相同,就像声明列为varchar(100)
和varchar(200)
一样。number(p,s)
中指定p参数对存储大小没有影响,仅用于对数据应用约束。但是,指定s参数可以通过四舍五入数据来减小大小。number
数据类型即可。
dump
函数!它帮助我调试一些奇怪的Oracle(客户端库)错误。 - Evgeniy Berezovsky