解決思路:
(1)跟蹤執行插入的sql/儲存過程,找到罪魁禍首的行,修改後再次插入。
(2)最簡單的辦法就是增加目的欄位的精度。
ora-01438: value larger than specified precision allowed for this column
由於定位不到具體的表以及具體的字段,需要跟蹤錯誤
1、首先進行建立表
sql> create table t (many number(4,2));
table created
精度為4,刻度為2 也就說整數字數最多為2,小數字數會占去2位
2、然後進行試驗插入
sql> insert into t values(1000000);
錯誤:ora-01438: value larger than specified precision allowed for this column
出現錯誤
3、進行系統設定改變進行trace
alter system set events='1438 trace name errorstack forever,level 10';
4、新開乙個會話(我覺得這樣的改變只對隨後的會話起作用,並不會對設定前的會話起作用)進行模擬錯誤。
sql> insert into tony.t values(100000000);
錯誤:ora-01438: value larger than specified precision allowed for this column
5、在後台系統
[oracle@localhost udump]$ pwd
/home/oracle/admin/orcl/udump
[oracle@localhost udump]$ ls
orcl_ora_5035.trc
還可以通過sql指令碼查詢生成的trace檔案:
select a.value || b.symbol || c.instance_name || '_ora_' || d.spid || '.trc'
trace_file
from (select value
from v$parameter
where name = 'user_dump_dest') a,
(select substr (value, -6, 1) symbol
from v$parameter
where name = 'user_dump_dest') b,
(select instance_name from v$instance) c,
(select spid
from v$session s, v$process p, v$mystat m
where s.paddr = p.addr and s.sid = m.sid and m.statistic# = 0) d
找到了trace檔案,當然我是先清空了所有以前的trace如果很多的話可以使用
ls -lrt 進行排序找最近的trc檔案。
6、檢視trace檔案
[oracle@localhost udump]$ more orcl_ora_5035.trc
檔案很多內容,我所用到的只有前面幾行。
ora-01438: value larger than specified precision allowed for this column
current sql statement for this session:
insert into tony.t
values(100000000)
順利找到語句.
最後加一句如果想disable掉可以使用
sql> alter system set events='1438 trace name errorstack off';
system altered
附件:
table 2-2 storage of scale and precision
actual
data
specified as
stored as
123.89
number
123.89
123.89
number(3)
124123.89
number(6,2)
123.89
123.89
number(6,1)
123.9
123.89
number(3)
exceeds precision
123.89
number(4,2)
exceeds precision
123.89
number(6,-2)
100.01234
number(4,5)
.01234
.00012
number(4,5)
.00012
.000127
number(4,5)
.00013
.0000012
number(2,7)
.0000012
.00000123
number(2,7)
.0000012
1.2e-4
number(2,5)
0.00012
1.2e-5
number(2,5)
0.00001
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...
ORA 01438 值大於為此列指定的允許精度
number的資料宣告如下 表示 作用 說明 number p,s 宣告乙個定點數 p precision 為精度,s scale 表示小數點右邊的數字個數,精度最大值為38,number p 宣告乙個整數 相當於number p,0 number 宣告乙個浮點數 其精度為38,要注意的是scale...