在oracle中number類型的字段長度是什么意思?
oracle中的number類型
number (precision,scale)
a) precision表示數字中的有效位,如果沒有指定precision的話,oracle將使用38作為精度;
b) 如果scale大于零,表示數字精度到小數點右邊的位數;scale默認設置為0;如果scale小于零,oracle將把該數字取舍到小數點左邊的指定位數。
c) Precision 的取值范圍是[1-38];scale的取值范圍是[-84-127].
d) Number整數部分允許的長度為(precision –scale),無論scale是正數還是負數。
e) 如果precision小于scale,表示存儲的是沒有正數的小數。
f) Precision表示有效位數,有效數位:從左邊第一個不為0的數算起,小數點和負號不計入有效位數;scale表示精確到多少位,指精確到小數點左邊還是右邊多少位(由+-決定)。
g) Number值類型舉例:
a) 關于precision,scale也可以做如下表述:
定點數的精度(p)和刻度(s)遵循以下規則:
1) 當一個數的整數部分長度 >p-s時,oracle就會報錯;
2) 當一個數的小數部分的長度 >s時,oracle就會舍入;
3) 當s(scale)為負數時,oracle就會對小數點左邊的s進行舍入;
4) 當s > p 時, p表示小數點后第s位向左最多可以有多少位數字,如果大于p則Oracle報錯,小數點后s位向右的數字被舍入。
Number類型的子類:
a) Oracle本來就沒有int類型,為了與別的數據庫兼容,新增了Int類型作為number類型的子集;
b) Int類型只能存儲整數,number可以存儲浮點數,也可以存整數。
c) 在oracle數據庫建表的時候,Decimal,numeric不帶精度,oralce會自動把它處理成integer;帶精度,oracle會自動把它處理成number。
d) Oracle只用number(m,n)就可以表示任何復雜的數字數據。
Decimal,numeric,int等都為sql,db2等數據庫的數據類型,Oracle為了兼容才將其引入;但實際上在oracle內部還是以number的形式將其存入的。