日期:2014-05-16 浏览次数:20644 次
解决思路:
(1)跟踪执行插入的SQL/存储过程,找到罪魁祸首的行,修改后再次插入。
(2)最简单的办法就是增加目的字段的精度。
其他参考链接:
http://www.itpub.net/thread-956435-1-1.html
http://www.eygle.com/archives/2009/07/errorstack_ora_01438.html
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)  | 
 124  | 
| 
 123.89  | 
 NUMBER(
                        
                    
                    
                      |