oracle数字类型存储转换的实现方案
我们可以通过转储函数转换一个数字的内存形式,而一个简单的输出类似于下面的格式:
复制代码代码如下所示:
从两个转储中选择转储(1);转储(1)
C
典型值= 2 = 2:193,2 Len
转储函数的输出格式类似:
类型,符号指数{数字1,数字2,数字3,…,数字20 }
你们所有人的意思如下:
1。类型:数字,类型= 2(类型代码可以在Oracle文档中找到)
2。长度:存储的字节数。
三.符号指数
在存储中,Oracle分别存储正和负的数字。
正数:添加1个存储(以避免null)
负数:负101,如果总长度小于21字节,最后为102(按顺序)。
指数变换:
正数:索引=符号指数- 193(最高为正值1)
负数:索引= 62 -第一字节
4。从一开始就是一个有效的数据位。
从开始到最高有效位,存储的数值方法是:
添加以下计算结果:
每一个乘以100个(指数n)(n是有效位的个数,第一个有效位的n=0)。
5。说明
复制代码代码如下所示:
从两个转储中选择转储(123456.789);转储(123456.789)
氨
典型值= 2 = 6:195,13,35,57,79,91 Len
:195-193 = 2
13-1 = 12 * 100 ^(2-0)120000
数= 34×100 ^(2-1)3400
57-1 = 56 * 100 ^(2-2)56
79-1 = 78 * 100 ^ 78(2-3)。
我国= 90 * 100 ^(2-4)。009
十二万三千四百五十六点七八九
复制代码代码如下所示:
从双转储中选择转储(- 123456.789);转储(- 123456.789)
----------------------------------
典型值= 2 = 7:60,89,67,45,2311102 Len
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 ^ 78(2-3)。
101-11 = 90 * 100 ^(2-4)。009
123456.789(-)
现在再想想为什么-123456.789实际上是存储在数据库中作为最终排序需要102。
60,89,67,45,23,11
和-123456.78901实际上是存储在数据库中
60,89,67,45,23,11,91
可以看出,如果你不加102,最后的123456.789 -123456.78901发生<<排序时,排序。
对于第2119个问题,第一个问题是:
1。为什么193,2意味着什么意思
你可以从中看到答案。
2。为什么数字数字类型的长度是2字节
对于这个问题,我想我们应该知道,所有的数据类型最终都存储在二进制计算机中。事实上,所谓的数据类型是由我们定义的。因此,存储仅由算法确定。
所以这个问题是不成立的。例如:
复制代码代码如下所示:
从两个转储中选择转储(110);转储(110)
贸易数据交换
典型值= 2 len = 3:194,2,11sql >选择转储(1100)从双;倾倒(1100)
-------------------
典型值= 2 = 2:194,12 Len
我们将看到,虽然1100 > 110,但1100的存储只占2字节,而110占3字节。