oracle的資料型別number存放格式

2021-09-09 05:57:46 字數 2389 閱讀 6318

sql> select 『smith』,dump(『smith』),dump(『smith』,16) from dual;

'smit dump(『smith』) dump(『smith』,16)

smith typ=96 len=5: 83,77,73,84,72 typ=96 len=5: 53,4d,49,54,48

而在trace中看到如下內容:

col 1: [ 5] 53 4d 49 54 48

s m i t h

這是ascii標準碼所規定的。

再看number型別

sql> select 7369,dump(7369),dump(7369,16) from dual;

7369 dump(7369)             dump(7369,16)
7369 typ=2 len=3: 194,74,70 typ=2 len=3: c2,4a,46
難點在於194,193,192這類數字的定義

定義是 0-256 0:ff ,

所以在10進製裡,定義的中點是128,用來表示0

-10000 , 60

-100 , 61

-1 ,62

-0.1 , 63

0 , 128

0.1 , 192

1 , 193

100 , 194

10000 , 195

1000000, 196

100000000,197

10000000000, 198

select 0,dump(0),1,dump(1),10,dump(10) from dual;

select 100,dump(100),1000,dump(1000),10000,dump(10000) from dual;

select 100000,dump(100000),1000000,dump(1000000),10000000,dump(10000000) from dual;

select 10000000000,dump(10000000000) from dual;

select 0.1,dump(0.1),0.01,dump(0.01),0.5,dump(0.5) from dual;

select -0.1,dump(-0.1),-0.01,dump(-0.01),-0.5,dump(-0.5) from dual;

select 0,dump(0),-1,dump(-1),-10,dump(-10) from dual;

select -100,dump(-100),-10000,dump(-10000) from dual;

select 100000,dump(100000),1000000,dump(1000000),10000000,dump(10000000) from dual;

select 10000000000,dump(10000000000) from dual;

typ=2 len=3: 194,2,2

內部的演算法是 1屬於193的第乙個數字,用2減去1就是1。而99是193的最大一位數字,100減去1就是99.

100屬於194的第乙個數字,2減去1就是1.而194的1代表的是100

而101分成2部分, 100歸在194的2,而1歸在193的2,所以看到是194,2,2

先看數字屬於哪個區間,然後再以個位,百位,萬位,百萬位,億位來劃分數字。再來拆分,

我們繼續看小數點的影響:

select dump(1.9999) from dual;

select dump(1.99) from dual;

select dump(1.01) from dual;

select dump(1.001) from dual;

select dump(1.10) from dual;

select dump(99.1) from dual;

select dump(99.01) from dual;

typ=2 len=3: 193,100,2

oracle的數字設計的很有意思。

小數點以兩位為單位,0.01最小就是2,而0.99最大就是100, 減去1就得到數字。

所以7369,屬於少於10000,應該是194區間,而74-1=73,而70-1=69 。

所以十進位制裡應該存放的是194,74,70 三個數字,演算法含義是低於10000的數字,前2位是73,後兩位是69.

而194,74,70轉換為十六進製制是c2,4a,46 這樣3個數字。

而我們對比dump出來的格式:

tl: 38 fb: --h-fl-- lb: 0x0 cc: 8

col 0: [ 3] c2 4a 46

至此,才完成了number型別的解釋和學習。

Oracle 的資料型別

oracle的內建資料型別可以分為3大類,即標量資料型別 幾何資料型別和關係資料型別。下面分別介紹這些資料型別 1 表量資料型別 標量資料型別是一般的資料型別,可以返回標量值。標量資料型別可以由字元資料型別 數字資料型別 日期資料型別 raw資料型別 大物件資料型別和行資料型別組成。字元資料型別可以...

oracle 的資料型別

資料型別 datatype 是列 column 或儲存過程中的乙個屬性。oracle支援的資料型別可以分為三個基本種類 字元資料型別 char char資料型別儲存固定長度的字元值。乙個char資料型別可以包括1到2000個字元。如果對char沒有明確地說明長度,它的預設長度則設定為1.如果對某個c...

oracle的資料型別

資料型別 引數描述 char n n 1 to 2000位元組 定長字串,n位元組長,如果不指定長度,預設為1個位元組長 乙個漢字為2位元組 varchar2 n n 1 to 4000位元組 可變長的字串,具體定義時指明最大長度n,這種資料型別可以放數字 字母以及ascii碼字符集 或者ebcdi...