**:
number的資料宣告如下:
表示 作用 說明
number(p, s) 宣告乙個定點數 p(precision)為精度,s(scale)表示小數點右邊的數字個數,精度最大值為38,
number(p) 宣告乙個整數 相當於number(p, 0)
number 宣告乙個浮點數 其精度為38,要注意的是scale的值沒有應用,也就是說scale的指不能簡單的理解為0,或者其他的數。
定點數的精度(p)和刻度(s)遵循以下規則:
? 當乙個數的整數部分的長度 > p-s 時,oracle就會報錯
? 當乙個數的小數部分的長度 > s 時,oracle就會捨入。
? 當s(scale)為負數時,oracle就對小數點左邊的s個數字進行捨入。
? 當s > p 時, p表示小數點後第s位向左最多可以有多少位數字,如果大於p則oracle報錯,小數點後s位向右的數字被捨入
所以,當錄入的資料出現其中某一種情況,就有可能報錯!如100.003入到number(6,4)的列中,就會報錯,因為100為三位數,3>6-4
ora-01438: 值大於為此列指定的允許精度
檢視時是資料型別的長度問題。
比如定義為number(4,2),卻要插入乙個值200.12的話,就會出錯。
原因是number(p,s)的問題。
number(p,s),其中p表示該number的總長度,s為小數字。
如果s為負數,則會取相應位數的取整。
例如,如果number(4,-3),則數字1234的儲存值為1000;
如果number(4,-2),則數字1234的儲存值為1200。
在對資料庫表中的字段設定型別時,要注意:
number(10,6) double 帶有小數
number(4) long 為整數
ORA 01438處理方法
解決思路 1 跟蹤執行插入的sql 儲存過程,找到罪魁禍首的行,修改後再次插入。2 最簡單的辦法就是增加目的欄位的精度。ora 01438 value larger than specified precision allowed for this column 由於定位不到具體的表以及具體的字段,...
ORA 01438處理方法
ora 01438處理方法 解決思路 1 跟蹤執行插入的sql 儲存過程,找到罪魁禍首的行,修改後再次插入。2 最簡單的辦法就是增加目的欄位的精度。由於定位不到具體的表以及具體的字段,需要跟蹤錯誤 1 首先進行建立表 sql create table t many number 4,2 table ...
ORA 01438 值大於為此列指定的允許精度
number的資料宣告如下 表示 作用 說明 number p,s 宣告乙個定點數 p precision 為精度,s scale 表示小數點右邊的數字個數,精度最大值為38,number p 宣告乙個整數 相當於number p,0 number 宣告乙個浮點數 其精度為38,要注意的是scale...