向大师致敬,向大师学习!!!

Oracle 内部如何存储 Number 类型的数值

上一篇 / 下一篇  2008-03-27 18:48:11 / 个人分类:数据库(oracle)

Oracle内部如何存在Number类型的数值

Index internal结构试验一中有dump出索引及table的相关block,从中分析索引的

一些内部结构,如需要更好的理解其中dump的内容,如col 0; len 2; (2): c1 02--c1 02

示数值型的1,即t=1的第一条记录,如何知道第一列存储的就是1呢?看完下面的文章,

你就会恍然大悟。感谢网友yangtingkun的努力,下面的摘要整理自他的blog上面的一篇文章,

更详细资料的见附件或者参阅原文作者的blog:Oracle基本数据类型存储格式浅(二)

——数字类型 http://yangtingkun.itpub.net/post/468/9445

 

一:Oracle的NUMBER类型最多由三个部分构成,这三个部分分别是最高位表示

位、数据部分、符号位。其中负数包含符号位,正数不会包括符号位。

二:数值0比较特殊,它只包含一个数值最高位表示位80,没有数据部分

三:正数的最高位表示位大于80,负数的最高位表示位小于80。其中一个正数的最高位是个位的话,则最高位表示位为C1,百位、万位依次为C2、C3,百分位、万分为依次为C0、BF。

四:一个负数的最高位为个位的话,最高位表示位为3E,百位、万位依次为3D、3C,百分位、万分位依次为3F、40。

五:数据部分每一位都表示2位数。这个两位数可能是从0到99,如果是数据本身是正数,则分别用二进制的1到64表示,如果数据本身是负数,则使用二进制65到2表示。

六:符号位用66表示。

七:负数和正数互为相反数,负数的最高位表示位和它对应的相反数的最高位相加的值是FF。1的最高位表示位是C1,-1的最高位表示位是3E。负数中1用64表示。负数中的数值和它相反数的数据相加是0x66,也就是符号位。正数1用0x02表示,负数1用0x64表示,二者相加是0x66。负数多个一个标识位,用0x66表示。由于正数的表示范围是0x01到0x64,负数的表示范围是0x65到0x02。因此,不会在表示数字时出现的0x66表示。

 

 


TAG: dump number oracle 数据类型

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar