博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORACLE存储之NUMBER类型
阅读量:6714 次
发布时间:2019-06-25

本文共 1527 字,大约阅读时间需要 5 分钟。

这篇是关于ORALCE对NUMBER类型存储方式的探析, 以及试图对设计者的初始意图进行解释.

最近往上看了很多对ORACLE怎样进行数据存储进行描述的, 感觉都不好理解, 于是参照了很多文章, 自己琢磨了下几种简单数据类型的存储.

Number类型

ORACLE
number
的存储
,
首先是按一定规则进行转换以后以十六进制存储
(
真正存储当然是二进制
,
只是我们
dump
出来看到的是十六进制
)
.

 

ORACLE数据库中存储的number类型包含3个部分: HEAD部分, DATA部分, 符号位.

对正数来说, 符号位省略, 0来说, 只有80.

首先来看几个存储的例子, 我们可以用

SELECT DUMP(89,16) FROM dual

来看到ORACLEnumber类型实际存储的结果: Typ=2 Len=2: c1, 5a

当然,如果我们想看十进制的,就用

SELECT DUMP(89,10) FROM dual

Typ=2 Len=2: 193, 90

123 à C2, 2, 18

123.123 à C2, 2, 18, D, 1F

0 à 80

-123 à 3D, 64, 4E, 66

-0.123 à 3F, 59, 47, 66

HEAD部分为一个字节8, 表示其大小, 当然也包括正负, 就是前面看到的C2, 3D.

因为设计这种存储格式的时候, 希望以十六进制00-FF来表示所有的number, 所以为了编码的对称, 首先将number分为正负, 所以以00-FF的中间位置80, 也就是十进制的128来表示0, HEAD部分小于80,即为负数,大于80即为正数.

, 一个数, 都可以表示成(+/-)A.B * 10(+-)C, 正负A.B * 10的正负C次方.

所以, ORACLE再次对00-80, 80-FF进行对分.

00-3E表示 x <= -1

3F-7F 表示 -1< x <0

81-C0 表示 0< x < 1

C1-FF 表示 1<= x

 

然后,我们再来看数据部分, ORACLE对十进制的数字是两位两位进行存储的, 例如对1234, ORACLE会分别对12, 34进行存储. 所以只需要对(+-)1-99进行编码

1-99 分别用十六进制2-64表示就是2-100 x=y-1,

-1 – -99用十六进制64 – 2表示就是100-2 x=y-101

 

而位数的话, 就分别以距+-1两个标准(为了方便,我们以下将以十进制来看)3E, C1(62,193)之差来表示. 至于符号位, 网上有人说是为了方便排序, 并且用的是(+-)1-99都不可能用到的编码66(102)来表示.

 

例如123, 我们看为(100+23), 1要多一个百位, 所以HEAD表示为193 + 1 = 194

数据部分用(2, 24)表示, 就是(194,2,24), 转换为十六进制为(C2, 2, 18)

 

123.123, 我们看为(100+23+0.12+0.0030), 同样HEAD部分为194

数据部分成了(2,24,13,31), 所以就是(C2,2,18,D,1F)

 

-123, 我们看为(-100-23), 1多一个百位, 所以HEAD62-1 = 61

数据部分(64, 78), 所以就是(3D, 64, 4E, 66)

 

-0.123, 我们看为(-0.12-0.0030), 最高位比-1少一个百分位, 所以HEAD62+1 = 63

数据部分为(89,71), 所以就是(3F, 59, 47, 66)

 

其余可类推, 其逆过程也很容易知道了.

转载地址:http://zaxlo.baihongyu.com/

你可能感兴趣的文章
技术,是不是越新越好?
查看>>
委托引入和本质
查看>>
MySQL详解--锁,事务
查看>>
java虚拟机 jvm java堆 方法区 java栈
查看>>
从产品角度看腾讯鹅厂是如何崛起的
查看>>
论文阅读之:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network...
查看>>
操作系统存储管理和oracle数据库(第二篇)
查看>>
我的女儿二三事(三)
查看>>
R1-004 Shell命令种类
查看>>
数据挖掘十大经典算法——EM
查看>>
运维平台的建设思考
查看>>
PCA、NMF、KNN在实战中的算法解析
查看>>
复杂而艰辛的重构之路--起步
查看>>
Spring 定时任务之 @Scheduled cron表达式
查看>>
想清楚再入!VR硬件创业能“要你命”
查看>>
Git协作流程(转)
查看>>
web项目部署后heap溢出(jconsole java虚拟机内存管理 tomcat内存管理)
查看>>
No ongoing transaction. Did you forget to call multi?
查看>>
9.6、Libgdx之罗盘
查看>>
JAVA实现AES的加密和解密算法
查看>>