ITPub博客

首页 > > > 10_深入解析Oracle number数据类型及os层number解析工具分享

10_深入解析Oracle number数据类型及os层number解析工具分享

作者:orastar 时间:2020-03-23 14:25:03 0 删除 编辑

一、概念介绍



         Oracle数据库number类型的物理二进制存储结构,由可变长度的单byte数字数组组成,Number类型的格式由,长度,指数,(数据1,数据2..数据20)三部分组成,本节主要通过手工计算的方式,解析以下示例,

二进制:c3,d,23,39,4f,5b  如何转换为  10进制: 123456.789;

二进制:3c,59,43,2d,17,b,66 如何转换为 10进制:-123456.789。

最后,分享os层Oracle number数据类型解析工具,方便大家解析和深入研究,工具下载方法:请关注公众号,回复“oranum”。

感谢您的阅读,如果您觉得有所收获,也欢迎把文章分享给您的朋友。

 

二、计算规则描述



图1 number类型说明

number数据类型由:length,sign bit/exponent,digit[n]三部分组成。

 

sign bit(正负号位)计算规则:

first byte >=128?(正数):(负数)。

解释:第一个字节如果大于等于128则为正数,否则为负数。

 

exponent(指数位)计算规则:

正数:exponent = first byte - 128 - 65(offset) = first byte - 193

负数:exponent = (255 - first byte) - 128 - 65(offset) = 62 - first byte

 

三、正数计算规则



 

res_1 = (the second byte(10进制) -1) * 100^ exponent

  res_2 = (thesecond byte(10进制) -1) * 100^ (exponent-1)

       …

 res_n = (thesecond byte(10进制) -1) * 100^ (exponent-(n-1))

 结果为:res = res_1+res_2…+res_n;


四、负数计算规则



  res_1 = (101-the second byte(10
进制)) * 100^ exponent

  res_2 = (101-thesecond byte(10进制) ) * 100^ (exponent-1)

       …

res_n = (101-thesecond byte(10进制) ) * 100^ (exponent-(n-1))

 结果为:res = -( res_1+res_2…+res_n);

五、正数计算演示



图2 正数计算演示

六、负数计算演示



图3 负数计算演示

七、os级工具演示



mkdir -p /home/oracle/orastar

mv ora_num /home/oracle/orastar

exportPATH=/home/oracle/orastar/:$PATH

图4 ora_num工具演示

八、说明



1、以上内容为个人多次测试结果,由于个人原因,如有分析不足之处还请见谅及指正。

2、文章涉及内容,请勿在生产环境模拟。

 


纸上得来终觉浅,绝知此事要躬行。--陆游



感谢您的阅读,如果您觉得有所收获,也欢迎把文章分享给您的朋友。





 


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31442014/viewspace-3127150/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
作者简介:惠星星,现就职于云和恩墨,持有OCP 10g、OCP 11g、OCM 11g证书,并有长达8年电力行业业务维护、数据库维护服务经验,擅长Oracle数据库性能优化、故障处理及Oracle internal研究。

注册时间:2017-03-08

  • 博文量
    171
  • 访问量
    429755