Oracle在数据库内部通过相应的算法转换来进行数据存储,本文简单介绍Oracle的Number型数值存储及转换.这个内容是为了回答留言板上的2119号问题.

我们可以通过DUMP函数来转换数字的存储形式,一个简单的输出类似如下格式:

复制代码 代码如下:

SQL> select dump(1) from dual;DUMP(1)

------------------

Typ=2 Len=2: 193,2

DUMP函数的输出格式类似:

类型 ,符号/指数位 [数字1,数字2,数字3,......,数字20]

各位的含义如下:

1.类型: Number型,Type=2 (类型代码可以从Oracle的文档上查到)

2.长度:指存储的字节数

3.符号/指数位

在存储上,Oracle对正数和负数分别进行存储转换:

正数:加1存储(为了避免Null)

负数:被101减,如果总长度小于21个字节,最后加一个102(是为了排序的需要)

指数位换算:

正数:指数=符号/指数位 - 193 (最高位为1是代表正数)

负数:指数=62 - 第一字节

4.从开始是有效的数据位

从开始是最高有效位,所存储的数值计算方法为:

将下面计算的结果加起来:

每个乘以100^(指数-N) (N是有效位数的顺序位,第一个有效位的N=0)

5. 举例说明

复制代码 代码如下:

SQL> select dump(123456.789) from dual;DUMP(123456.789)

-------------------------------

Typ=2 Len=6: 195,13,35,57,79,91

: 195 - 193 = 2

13 - 1 = 12 *100^(2-0) 120000

35 - 1 = 34 *100^(2-1) 3400

57 - 1 = 56 *100^(2-2) 56

79 - 1 = 78 *100^(2-3) .78

91 - 1 = 90 *100^(2-4) .009

123456.789

复制代码 代码如下:

SQL> select dump(-123456.789) from dual;DUMP(-123456.789)

----------------------------------

Typ=2 Len=7: 60,89,67,45,23,11,102

62 - 60 = 2(最高位是0,代表为负数)

101 - 89 = 12 *100^(2-0) 120000

101 - 67 = 34 *100^(2-1) 3400

101 - 45 = 56 *100^(2-2) 56

101 - 23 = 78 *100^(2-3) .78

101 - 11 = 90 *100^(2-4) .009

123456.789(-)

现在再考虑一下为什么在最后加102是为了排序的需要,-123456.789在数据库中实际存储为

60,89,67,45,23,11

而-123456.78901在数据库中实际存储为

60,89,67,45,23,11,91

可见,如果不在最后加上102,在排序时会出现-123456.789

对于2119号提问,第一个问题是:

1.请问为什么193,2各代表什么意思?

从上面就可以看到答案了.

2.还有NUMBER数字类型为什么有2个字节的长度呢?

对于这个问题,我想我们应该知道,所有数据类型最终在计算机里都以二进制存储,实际上所谓的数据类型都是我们定义的.所以存储只由算法决定.

所以这个问题是不成立的.比如:

复制代码 代码如下:

SQL> select dump(110) from dual;DUMP(110)

---------------------

Typ=2 Len=3: 194,2,11SQL> select dump(1100) from dual;DUMP(1100)

-------------------

Typ=2 Len=2: 194,12

我们会看到,虽然1100>110,但是存储上1100却只占2字节,而110却占了3个字节.

免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

oracle number长度转换,Oracle Number型数值存储与转换的实现详解相关推荐

  1. 汇川小型PLC梯形图编程系列教程(七):数值存储与二进制数据知识详解

    原文链接:汇川小型PLC梯形图编程系列教程(七):数值存储与二进制数据知识详解 PLC数据存储原理简介 H123U小型PLC内部采用的是32位的处理器,PLC中的数据处理和电脑中的数据处理基本是一致的 ...

  2. 汇川plc可以用C语言吗,汇川小型PLC梯形图编程系列教程(七):数值存储与二进制数据知识详解...

    PLC数据存储原理简介 H123U小型PLC内部采用的是32位的处理器,PLC中的数据处理和电脑中的数据处理基本是一致的.所有的CPU进行数据处理时,都是将其他进制的数据转换成二进制数进行加减乘除运算 ...

  3. Windows系统里Oracle 11g R2 Client(64bit)的下载与安装(图文详解)

    1.全网最详细的Windows系统里Oracle 11g R2 Client(64bit)的下载与安装(图文详解) 方法地址:https://www.cnblogs.com/zlslch/p/9273 ...

  4. 有序标称变量(Categorical Features)编码为数值变量(Continuous Features​​​​​​​)详解及实践

    有序标称变量(Categorical Features)编码为数值变量(Continuous Features)详解及实践 有一个带顺序的分类特征(例如,高.中.低) 使用pandas DataFra ...

  5. oracle home 命令,$ORACLE_HOMEbin目录下所有命令的使用方法及命令详解

    求$ORACLE_HOME/bin目录下所有命令的使用方法及命令详解 如题. $ORACLE_HOME/bin目录下有很多命令,那我们平时用到的也不是太多,即使用到的那部分可能用法也不是完全能掌握,所 ...

  6. 阿里云大数据型实例规格族d1配置性能详解

    阿里云大数据型实例规格族d1配置性能CPU.内存.适用场景.d1实例规格族,InstanceTypes分享大数据型实例规格族d1实例详解: 大数据型实例规格族d1配置特性 I/O优化实例 仅支持SSD ...

  7. P型MOS管开关电路及工作原理详解-KIA MOS管

    P型MOS管开关电路图 PMOS是指n型衬底.p沟道,靠空穴的流动运送电流的MOS管. P沟道MOS晶体管的空穴迁移率低,因而在MOS晶体管的几何尺寸和工作电压绝对值相等的情况下,PMOS晶体管的跨导 ...

  8. oracle自定义长度异常,Oracle 自定义wmsys.wm_concat 避免长度限制

    Oracle自定义wmsys.wm_concat避免长度限制网上搜索到这段类似代码但是长度过程还是不行,经过我的修改,亲测可以. CREATEORREPLACETYPEZH_CONCAT_IM AUT ...

  9. Oracle索引、视图、序列、同义词、事务、锁机制详解

    索引 什么是索引? -- 索引就类似于书的目录,根据目录查询内容会快很多,提高数据查询效率 创建索引有俩种方式 1.Oracle会自动为主键和唯一键创建索引 2.手动创建约束. 那么表中什么样的字段应 ...

最新文章

  1. 打造具备互补测试技能的团队
  2. ios-晋级之路 CocoaPods引用第三方库不import不自动补齐
  3. linux 逻辑运算符and,布尔逻辑运算符
  4. 创建一个 Django 项目
  5. 申请贷款必须留联系人吗?不留行不行?
  6. PDF.js开发笔记
  7. jboss 4.3.0_JBoss BPM Suite 6.0.3版本的5个实用技巧
  8. 为什么蚂蚁金服架构师建议从Zookeeper开始提升技术水平?
  9. 为PHP开发搭建环境
  10. 剑指offer--二叉树中和为某一值得路径
  11. 《101 Windows Phone 7 Apps》读书笔记-TODO LIST
  12. 服务端Latex解析成图片或者HTML或者SVG方案
  13. 【三维路径规划】基于matlab改进粒子滤波无人机三维路径规划【含Matlab源码 1269期】
  14. 单结晶体管的导电特性_【硬见小百科】二极管基础知识分类,应用,特性,原理,参数(二)...
  15. 前端json文件模拟数据与后台交互
  16. 网站文章内容发现重复率过高的解决办法
  17. 10大习惯让你变年轻
  18. 开源GIS(十八)——分辨率与比例尺
  19. springboot 全局时间转换器
  20. 《数据结构》—— 二叉树的复制、查深度与算结点操作

热门文章

  1. oracle等待事件查询,Oracle查看等待事件_yh_zeng2的博客-CSDN博客
  2. iso qemu 安装ubuntu_我该如何安装qemu?
  3. 苹果手机内存怎么查_为什么苹果手机内存越用越小
  4. 鼠标划过图片进行缩放效果
  5. kafka消息队列的概念理解
  6. 使用lucene实现简单的全文检索
  7. (一)在Azure上创建完整的无服务器云原生应用程序
  8. Blazor Hydra——在单个站点上托管多个Blazor SPA
  9. HigLabo.Mapper,用表达式树在10天内创建世界上最快的对象映射器
  10. python语言goto_如何在 Python 中实现 goto 语句