ORA 01438 值大於為此列指定的允許精度

2021-09-27 05:55:40 字數 1014 閱讀 8592

**:

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...