ORACLE儲存之NUMBER型別

2021-10-07 03:10:01 字數 2096 閱讀 8199

這篇是關於oralce對number型別儲存方式的探析, 以及試圖對設計者的初始意圖進行解釋.

最近往上看了很多對oracle怎樣進行資料儲存進行描述的, 感覺都不好理解, 於是參照了很多文章, 自己琢磨了下幾種簡單資料型別的儲存.

number型別

oracle

對 number

的儲存, 首先是按一定規則進行轉換以後以十六進製制儲存

( 真正儲存當然是二進位制

, 只是我們

dump

出來看到的是十六進製制

) 的.oracle資料庫中儲存的number型別包含3個部分: head部分, data部分, 符號位.

對正數來說, 符號位省略, 對0來說, 只有80.

首先來看幾個儲存的例子, 我們可以用

selectdump(89,

16)fromdual

來看到oracle對number型別實際儲存的結果: typ=2 len=2:c1, 5a

當然,如果我們想看十進位制的,就用

selectdump(89,

10)fromdual

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-100x=y-1,

-1 – -99用十六進製制64 – 2表示就是100-2x=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多乙個百位, 所以head為62-1 = 61

資料部分(64, 78), 所以就是(3d, 64, 4e, 66)

-0.123, 我們看為(-0.12-0.0030), 最高位比-1少乙個百分位, 所以head為62+1 = 63

資料部分為(89,71), 所以就是(3f, 59, 47, 66)

其餘可類推, 其逆過程也很容易知道了.

ORACLE儲存之NUMBER型別

這篇是關於oralce對number型別儲存方式的探析,以及試圖對設計者的初始意圖進行解釋.最近網上看了很多對 oracle 怎樣進行資料儲存描述的 感覺都不好理解 於是參照了很多文章 自己琢磨了下幾種簡單資料型別的儲存 number型別 oracle 對number 的儲存,是按一定規則進行轉換以...

Oracle的Number型數值儲存及轉換

我們可以通過dump函式來轉換數字的儲存形式,乙個簡單的輸出類似如下格式 sql select dump 1 from dual dump 1 typ 2 len 2 193,2 dump函式的輸出格式類似 型別 長度 符號 指數字 數字1,數字2,數字3,數字20 各位的含義如下 1.型別 num...

oracle 學習筆記 number

1 number可以儲存整數和非整數。儲存非整數時,數字的有效位數稱作精度,右邊的小數部分稱作刻度 小數字數 例如 數字 29.1963的精度為6,刻度為4。最大精度38,資料上顯示最大刻度可以為127,我本地測試也建立除了number 38,127 的字段,但是一直沒能成功插入數字。2 建立表 c...