【问题标题】:How can I know if 10385274000 fits into: NUMBER(10) for Oracle?我如何知道 10385274000 是否适合:Oracle 的 NUMBER(10)?
【发布时间】:2009-08-01 01:07:53
【问题描述】:

我整周都在努力解决生产错误。

我终于明白了,我可以找到导致所有混乱的罪魁祸首记录。

我收到以下错误消息:

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 天以上的时间才发现,因为这是一个封闭的应用程序,我不知道发生了什么,我唯一知道的是堆栈跟踪。

我不得不对整个过程进行逆向工程(在这个词的旧意义上,手动并且显然没有源)以找出这一点。

当我这样做时,我的“手动编码迁移器”中出现了同样的错误,并了解如何解决它!

【问题讨论】:

  • 如果您确实使用了“紧急”一词,请以可读的格式使用它,而不是持续使用的词。紧急就紧急,但人们必须知道紧急,这很难:“紧急!”
  • 一种 q&d 方法是创建一个包含数字 (10) 的临时表并尝试插入该值。如果它有效,那不是问题。

标签: java oracle jdbc types maxlength


【解决方案1】:

NUMBER(10) 中的数字 10 指定字段大小。这意味着该字段可以包含最多 10 个字符的数字。您的号码有 11 位数字,因此该值太大而无法适应。任何小于 (

【讨论】:

  • 如果他们是角色?
  • 快速谷歌给出了这个参考页:techonthenet.com/oracle/datatypes.php
  • Number(10) 中的“10”指定总位数。或者,您还可以指定小数位数。引用上面的链接“例如,numeric(7,2) 是一个小数点前 5 位和小数点后 2 位的数字。”
  • @Emil H -- 为什么不小于 (99 999 999 999)?
  • @JohnOsborne:因为 10 000 000 000 到 99 999 999 999 有 11 位数字。
猜你喜欢
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
  • 2020-01-11
  • 2015-03-28
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
相关资源
最近更新 更多