设为首页 收藏本站
查看: 845|回复: 0

[经验分享] Oracle基本数据类型存储格式研究(二)—数字类型

[复制链接]
YunVN网友  发表于 2016-8-13 06:23:37 |阅读模式
  数字类型包含number,integer,float...oracle内部标识为2
  数字类型在oracle内部是以单字节的数字为存储的变长数组
  数字类型在oracle文件中的存储格式为:
  类型 <[长度]>,符号/指数位 [数字1,数字2,数字3,......,数字20]
  各位的含义如下:
  1.类型: Number型,Type=2 (类型代码可以从Oracle的文档上查到)
  2.长度:指存储的字节数
  3.符号/指数位
  在存储上,Oracle对正数和负数分别进行存储转换:
  正数:加1存储(为了避免Null)
负数:被101减,如果总长度小于21个字节,最后加一个102(是为了排序的需要)
  指数位换算:
  If the first byte is greater than or equal to 128, then the number is positive and the
exponent is:
exponent = first byte - 128 - 65 = first byte - 193
If the first byte is less than 128, then the number is negative and the exponent is:
exponent = (255 - first byte) - 128 - 65 = 62 - first byte
  4.从<数字1>开始是有效的数据位
  从<数字1>开始是最高有效位,所存储的数值计算方法为:
  将下面计算的结果加起来:
  每个<数字位>乘以100^(指数-N) (N是有效位数的顺序位,第一个有效位的N=0)
  5. 正数计算举例:
  

SYS@huiche>select dump(123456.783,16) from dual;
DUMP(123456.783,16)
----------------------------------------------------------
Typ=2 Len=6: c3,d,23,39,4f,1f
SYS@huiche>
<指数>:   195 - 193 = 2
· 数字
0xd = 13(dec) -1 = 12 > 12 * 100^2 = 120000
0x23 = 35(dec) -1 = 34 > 34 * 100^1 = 3400
0x39 = 57(dec) -1 = 56 > 56 * 100^0 = 56
0x4f = 79(dec) -1 = 78 > 78 * 100^-1 = .78
0x5b = 31(dec) -1 = 30 > 90 * 100^-2 = .003
sum = 123456.783
 因为第一个字节(0xc3)大于128, 所以为正数

  6.负数计算举例:
  

SYS@huiche>select dump(-123456.783,16) from dual;
DUMP(-123456.783,16)
------------------------------------------------------------------
Typ=2 Len=7: 3c,59,43,2d,17,47,66
SYS@huiche>
指数 => 0x3c= 62(dec) - 60 = 2
· 数字
0x59 = 89(dec): 101 - 89 = 12 > 12 * 100^2 = 120000
0x43 = 67(dec): 101 - 67 = 34 > 34 * 100^1 = 3400
0x2d = 45(dec): 101 - 45 = 56 > 56 * 100^0 = 56
0x17 = 23(dec): 101 - 23 = 78 > 78 * 100^-1 = .78
0xb = 11(dec): 101 - 71 = 30 > 30 * 100^-2 = .003
sum = 123456.783 (-)
· 最后一个字节不计算在内 0x66 = 102(dec) ,第一个字节(0x3c)小于128, 所以为负数
  7.0的存储数字是80
  

SYS@huiche>select dump(0,16) from dual;
DUMP(0,16)
------------------------------
Typ=2 Len=1: 80
SYS@huiche>
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-256891-1-1.html 上篇帖子: 关于Oracle数据库的启动和停止 下篇帖子: 谈谈Oracle数据库启动时禁用smon事务恢复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表