ORA-01438解决方法
解决思路: (1)跟踪执行插入的SQL/存储过程,找到罪魁祸首的行,修改后再次插入。 (2)最简单的办法就是增加目的字段的精度。
解决思路:
(1)跟踪执行插入的SQL/存储过程,找到罪魁祸首的行,修改后再次插入。
(2)最简单的办法就是增加目的字段的精度。
由于定位不到具体的表以及具体的字段,需要跟踪错误
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(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
相关阅读:
SPFILE 错误导致数据库无法启动(ORA-01565)
ORA-01172、ORA-01151错误处理
ORA-00600 [2662]错误解决
上一篇: PHP数组分级,百般无奈,救助
下一篇: Oracle 10g 数据库逻辑备份
推荐阅读
-
Maven项目build时出现No compiler is provided in this environment的解决方法
-
Eclipse中server启动超时的解决方法 博客分类: java-eclipse eclipse
-
php程序能不能捕捉摄像头画面解决方法
-
log引起的mysql不能启动的解决方法
-
暴风影音盒子出现白屏的解决方法
-
写php分页时出现的Fatal error的解决方法
-
PermGen space错误解决方法 博客分类: java-eclipse eclipsePermGen space
-
MySQL连接数超过限制的解决方法
-
Eclipse中server启动超时的解决方法 博客分类: java-eclipse eclipse
-
使用php实现下载生成某链接快捷方式的解决方法_PHP