oracle存储一个数字格式,Oracle根本数据类型存储格式研究(二)—数字类型
Oracle基本数据类型存储格式研究(二)—数字类型
数字类型包含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.从开始是有效的数据位
从开始是最高有效位,所存储的数值计算方法为:
将下面计算的结果加起来:
每个乘以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>
oracle存储一个数字格式,Oracle根本数据类型存储格式研究(二)—数字类型相关推荐
- 解决Oracle存储生僻字、oracle生僻字,oracle偏僻字、数据库生僻字,数据库偏僻字
处理前,乱码,如下图所示 通过以下方法处理: -- 解决Oracle存储生僻字.oracle生僻字,oracle偏僻字.数据库生僻字,数据库偏僻字 -- 只能保证业务系统能正常读取生僻字-- 第一步: ...
- oracle 增加一个新分区,oracle 11g 新增分区
oracle 11g新增了间隔分区.虚拟列分区和引用分区.详细的介绍请查看官方文件: 1. 间隔分区 间隔分区是范围分区的一种扩展.在引入间隔分区之前,DBA 需要显式定义每个分区的值范围,随着分区值 ...
- oracle如何查询时间格式,oracle时间格式讨论
1. oracle对时间格式的数据存贮 Oracle以特定的存储格式来存储时间,占7个字节,与查询显示的时间无关.存贮的时间包括年月日时分秒,最小精度为秒,不存贮秒以下的时间单位.因此在一些前台支持毫 ...
- oracle 存储中文 u码,Oracle 汉字 占位
遇到了一个数据插入长度过长问题,记得大学时候,还说过oracle的不同编码下的的大小分配不是一样的,具体也忘记了,补上,以防下次犯二 1 step 先查看自己的oracle是什么字符集 select ...
- oracle有哪些日期格式,Oracle 日期格式
Oracle 获取当前时间的月份 select extract(year from sysdate) from dual; --oracle 日期参数 --今天 SELECT to_char(SYSD ...
- Linux怎么调oracle存储,Linux 环境下Oracle安装与调试(四)之视图、存储过程
1.视图的介绍和使用 表和视图的区别,表是占用硬盘空间物理表,而视图可以理解为一个虚表,并不存储在硬盘上, 不占用硬盘空间,实际上就是一个查询语句,方便查询. 对视图里面的数据操作(增 删 改) 其实 ...
- php 取oracle图片,一个php导出oracle库的php代码
红色字为变量,我也是边查手册边写的,以前没有接触过,这段小代码用了一个多小时,记录一下 $conn=OCILogon("用户名","密码","(DES ...
- oracle可以导出的格式,Oracle导入导出数据的几种方式
oracle导入导出数据 1.导出dmp格式文件 --备份某几张表 !!!! exp smsc/smsc file=/data/oracle_bak/dmp/bakup0209_2.dmp table ...
- oracle 建一个自增序列,Oracle中如何创建使用SEQUENCES自增序列
Oracle中如何创建使用SEQUENCES Oracle提供了sequence对象,由系统提供自增长的序列号,通常用于生成数据库数据记录的自增长主键或序号的地方. 下面介绍一下关于sequence ...
最新文章
- 头条Android面试题,史上最全的Android面试题集锦(五)
- 旋转动画 rotate
- xarray 笔记:DataArray
- 【web安全】第三弹:web攻防平台pentester安装及XSS部分答案解析
- Linux之加密和安全
- android8 通知呼吸灯_正在消失的功能,为什么越来越多的手机没有呼吸灯?你知道原因吗...
- QT保留小数点后几位
- koa2与php比较,模仿KOA,用php来写一个极简的开发框架
- win10如何做服务器双系统,双系统怎么做?Win7+Win10 双系统安装图文教程
- 电脑开机提示计算机无法启动不了,图文详解电脑开机无法进入系统怎么办
- GeoServer发布OSM地图
- mysql避免回文_谈谈回文子串
- CSS参考手册_web前端开发参考手册系列
- 猫盘安装群晖synology (by quqi99)
- windows 10必装的五款神器
- 旗杆的安装方法和流程
- guile 操作笔记
- WordPress博客无法登陆后台的解决办法
- sql按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便
- bzoj1816 扑克牌 贪心(不用二分QvQ)