問題:項目中突然在更新或者是插入數據的時候報ora01438這個錯,知道是number類型精度不匹配,但是自己debug發現並沒有出現具體的表和字段
現象:java.sql.BatchUpdateException: ORA-01438: 值大於為此列指定的允許精度
我自己解決的方法:
在dba權限用戶操作
alter system set events='1438 trace name Errorstack forever,level 12';
查看trace文件
通過oracle的警告文件/home/oracle/app/diag/rdbms/orcl/orcl/trace/alert_orcl.log可以幫助你准確定位trace文件
Tue Nov 04 13:54:09 2014 Errors in file /home/oracle/app/diag/rdbms/orcl/orcl/trace/orcl_ora_28912.trc: ORA-01438: 值大於為此列指定的允許精度
找到指定的/home/oracle/app/diag/rdbms/orcl/orcl/trace/orcl_ora_28912.trc文件
----- Error Stack Dump ----- ORA-01438: 值大於為此列指定的允許精度 ----- Current SQL Statement for this session (sql_id=as315uv85ktcx) ----- insert into "test" values(280750000)
但是我的真實的環境中並不是簡單的insert語句,這里只能看到具體的是那張表出錯。但是具體的是那個字段和字段的值,我只能分析
項目中數據來源是不是超出number(p,s)的范圍。
雖然解決了問題,但是麻煩。
還有在數據庫設計的時候,應該把關聯字段的類型精度設置相同,再有也應該在數據錄入做類型檢查,出現這個錯應該是可以在設計的時候避免的。
自己主要解決不了的問題,在於只能簡單的分析trace文件,而不能分析trace文件的具體信息。
如有大神看到,請不吝賜教。