我整周都在努力解决生产错误。
我终于明白了,我可以找到导致所有混乱的罪魁祸首记录。
我收到以下错误消息:
java.sql.SQLException: [BEA][Oracle JDBC Driver][Oracle]ORA-01438: value larger than specified precision allows for this column
最终从所有信息中我认为这可能是错误的数据,系统正在尝试插入:
10385274000
进入 NUMBER(10)
我怎么知道这个值是否合适?
谢谢
编辑
根据 Michel Todd 的建议:
create table xyz( testfield number( 10 ) );
insert into xyz values( 10385274000 )
Error: ORA-01438: value larger than specified precision allowed for this column
谢谢你们!!!
谢谢stackoverflow
编辑
给自己的笔记(不要忘记问题所在)
我有这个 Oracle 产品,它在数据库表中存储事件的时间
START_TIME|END_TIME
事实证明,它每天晚上都会将此信息备份到另一个表中,但在此过程中会执行一次转换。它确实存储为:
TOTALTIME
当这个字段是通过减去 ENDTIME - STARTTIME 来计算时,问题就来了。结果数字存储在此列中,定义为:NUMBER(10)
好吧,事实证明,如果 END_TIME-START_TIME 在时间(大约 4 个月左右)太远,值(以毫秒为单位)会太大,不适合目标列(我猜它有类似 endTime .getTime() - 代码中的 startTime.getTime()
现在所有这些听起来都太容易太傻了,但我花了 4 天以上的时间才发现,因为这是一个封闭的应用程序,我不知道发生了什么,我唯一得到的就是堆栈跟踪。
我不得不对整个过程进行逆向工程(在这个词的旧意义上,手动并且显然没有源代码)以找出这一点。
当我这样做时,我的“手动编码迁移器”中出现了同样的错误,并找出解决方法!