oracle中number型欄位長度、精度及實際儲存狀態測試(zt)

tolywang發表於2007-06-27

工作中經常要遇到這種欄位的處理情況,當然以前也見過大蝦總結過。但是看了之後,又還給人家。是人家的終究還是人家的,需要自己親自測試並總結才能變成自己的。

http://blog.chinaunix.net/u/22472/showart.php?id=258754


相關知識回顧:
有效數位:從左邊第一個不為0的數算起,小數點和負號不計入有效位數。
number(p,s)
p:1~38
s:-84~127
p>0,對s分2種情況:
1. s>0
精確到小數點右邊s位,並四捨五入。然後檢驗有效數位是否<=p;如果s>p,小數點右邊至少有s-p個0填充。
2. s<0
精確到小數點左邊s位,並四捨五入。然後檢驗有效數位是否<=p+|s|

案例測試:
hongsy;
名稱 是否為空? 型別
----------------------------------------------------- -------- ------------
NUM1 NUMBER
NUM2 NUMBER(2)
NUM3 NUMBER(5,3)
NUM4 NUMBER(5,-2)
into hongsy(num1) values(1111111111);
已建立 1 行。
;
提交完成。
into hongsy(num2) values(11);
已建立 1 行。
into hongsy(num2) values(111);
insert into hongsy(num2) values(111)
*
ERROR 位於第 1 行:
ORA-01438: 值大於此列指定的允許精確度

into hongsy(num2) values(-11);
已建立 1 行。
into hongsy(num2) values(-111);
insert into hongsy(num2) values(-111)
*
ERROR 位於第 1 行:
ORA-01438: 值大於此列指定的允許精確度

into hongsy(num2) values(-11.1);
已建立 1 行。
into hongsy(num2) values(-11.1111);
已建立 1 行。
;
提交完成。
num2 from hongsy;
NUM2
----------

11
-11
-11
-11
已選擇8行。
into hongsy(num3) values(111);
insert into hongsy(num3) values(111)
*
ERROR 位於第 1 行:
ORA-01438: 值大於此列指定的允許精確度

into hongsy(num3) values(11);
已建立 1 行。
into hongsy(num3) values(-11);
已建立 1 行。
into hongsy(num3) values(-111);
insert into hongsy(num3) values(-111)
*
ERROR 位於第 1 行:
ORA-01438: 值大於此列指定的允許精確度

into hongsy(num3) values(11.111);
已建立 1 行。
into hongsy(num3) values(11.1111);
已建立 1 行。
;
提交完成。
num3 from hongsy;
NUM3
----------

11
-11
11.111
11.111
已選擇12行。
into hongsy(num4) values(1111);
已建立 1 行。
into hongsy(num4) values(111111);
已建立 1 行。
into hongsy(num4) values(11111111);
insert into hongsy(num4) values(11111111)
*
ERROR 位於第 1 行:
ORA-01438: 值大於此列指定的允許精確度

;
提交完成。
num4 from hongsy;
NUM4
----------

1100
111100
已選擇14行。
into hongsy(num4) values(1111111);
已建立 1 行。
;
提交完成。
num4 from hongsy;
NUM4
----------

1100
111100
1111100
已選擇15行。
table hongsy1 (num1 number(39));
create table hongsy1 (num1 number(39))
*
ERROR 位於第 1 行:
ORA-01727: 數字精度說明符超出範圍(1 到 38)

table hongsy1 (num1 number(38,128));
create table hongsy1 (num1 number(38,128))
*
ERROR 位於第 1 行:
ORA-01728: 數字標度說明符超出範圍(-84 到 127)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84718/,如需轉載,請註明出處,否則將追究法律責任。

相關文章