我怎么知道10385274000是否符合:Oracle的NUMBER(10)?

Osc*_*Ryz 4 java oracle types jdbc maxlength

我整个星期都在工作,以解决生产错误.

我终于找到了能够找到导致所有混乱的罪魁祸首的记录.

我有以下错误消息:

java.sql.SQLException: [BEA][Oracle JDBC Driver][Oracle]ORA-01438: value larger than specified precision allows for this column
Run Code Online (Sandbox Code Playgroud)

事件来自所有信息,我认为这可能是错误的数据,系统正试图插入:

10385274000
Run Code Online (Sandbox Code Playgroud)

进入一个数字(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
Run Code Online (Sandbox Code Playgroud)

感谢你们!!!

谢谢stackoverflow

编辑

给自己的注意事项(不要忘记是什么问题)

我有这个Oracle产品,它在数据库表中存储事件的时间

START_TIME|END_TIME
Run Code Online (Sandbox Code Playgroud)

事实证明,每隔一夜它就会将这些信息备份到另一个表中,但会在此过程中执行转换.它存储为:

TOTALTIME
Run Code Online (Sandbox Code Playgroud)

当通过减去ENDTIME - STARTTIME计算此字段时出现问题.结果编号存储在此列中,定义为:NUMBER(10)

好吧,事实证明,如果END_TIME-START_TIME在时间上太远(大约4个月左右),那么这个值(以毫秒为单位)会很大,它将不适合目标列(我猜它有类似于endTime的东西) .getTime() - 代码中的startTime.getTime())

所有这些听起来太容易而且太傻了,但我花了4天时间才发现,因为这是一个封闭的应用程序,我不知道发生了什么,我唯一得到的就是堆栈跟踪.

我不得不对整个过程进行逆向工程(在OLD意义上,用手,显然是从源头开始)找到这个.

当我这样做时,我的"手动编码迁移器"中出现了同样的错误,并找出解决方法!

Emi*_*l H 12

NUMBER(10)中的数字10指定字段大小.这意味着该字段可以容纳最多10个字符的数字.您的号码有11位数字,因此值很大.任何小于(<)100亿(10 000 000 000)的东西都可以毫无问题地插入.如果要在插入之前验证值,则需要检查这些内容.

  • @JohnOsborne:因为 10 000 000 000 和最多 99 999 999 999 有 11 位数字。 (2认同)