我花了整整一周的时间来制造一个生产错误。
我终于找到了导致所有混乱的罪魁祸首。
我收到以下错误消息:
java.sql.SQLException: [BEA][Oracle JDBC Driver][Oracle]ORA-01438: value larger than specified precision allows for this column从所有的信息来看,我认为这可能是错误的数据,系统正在尝试插入:
10385274000变成一个数字(10)
我怎么知道这个值是否合适?
谢谢
编辑
根据米歇尔·托德的建议:
create table xyz( testfield number( 10 ) );
insert into xyz values( 10385274000 )
Error: ORA-01438: value larger than specified precision allowed for this column谢谢你们!
谢谢你的堆叠
编辑
给我自己的笔记(不要忘记问题所在)
我有一个Oracle产品,它将事件的时间存储在数据库表中
START_TIME|END_TIME结果显示,每天晚上,它都会将这些信息备份到另一个表中,但在此过程中执行一个performs。它的存储方式是:
TOTALTIME当通过减去结束时间- STARTTIME来计算这个字段时,问题就出现了.生成的数字存储在本列中,定义为:编号(10)
实际上,如果END_ time -START_TIME在时间上(大约4个月左右)太远,那么值(以毫秒为单位)就会很大,以至于不适合目标列(我猜它的代码中有类似于endTime.getTime() - startTime.getTime()的内容)。
现在,这一切听起来太简单了,也太愚蠢了,但我花了4 day+才发现,因为这是一个封闭的应用程序,我不知道发生了什么,我唯一得到的就是堆栈跟踪。
为了找出这个问题,我不得不在整个过程中(从旧的意义上说,手工和显然没有源)进行反向工程。
当我这样做的时候,我在我的“手编码的移影器”中也有同样的错误,并且找到了解决它的方法!
发布于 2009-08-01 01:15:58
数字10 (10)指定字段大小。这意味着该字段可以容纳长达10个字符的数字。您的数字有11位数,因此值太大而不适合。任何小于100亿(10,000,000)的内容都可以毫不费力地插入。如果要在插入之前验证值,则需要检查此值。
https://stackoverflow.com/questions/1215535
复制相似问题