【问题标题】:I get this error: ORA-01438: value larger than specified precision allowed for this column我收到此错误:ORA-01438:值大于此列允许的指定精度
【发布时间】:2021-07-22 15:48:55
【问题描述】:

我的数据库表中有一个类型为 Number(5,3) 的列。我需要能够向该列插入数据或更新数据。我目前正在使用一个表单字段,让用户输入他们想要的任何数字。此字段是在向 Number(5,3) 类型的此列中插入或更新数据时使用的字段。测试时,我输入任何数字并收到此错误:ORA-01438:值大于此列允许的指定精度

我知道数据类型 NUMBER(5,3) 表示 5 是精度(总位数),而 3 表示比例(小数点右侧的位数)。例如:52.904

oracle 中是否有一个函数可以将任何数字格式化为这种类型的数字:NUMBER(5,3)?

再次,我希望用户在字段中输入任何数字,并能够将该数字处理为 NUMBER(5,3) 以插入或更新到我的表中。

【问题讨论】:

  • 有些事情没有意义。是否有充分的理由对列进行限制?如果有充分的理由,则不应允许用户输入“任何数字”——如果他们输入像 3500 这样的数字,他们应该会收到一条错误消息。否则,您可以修改该列以接受更大范围的数字(例如,如果您希望整数部分最多允许七位数字,请将其更改为 number(10,3))。
  • @mathguy 我无法更改列的数据类型。这是一个旧版应用程序,我已经问过这个问题并且没有获得许可。
  • 好的,但是任何不给你权限的人都应该明白,像 100 这样的数字不能存储在该列中。时期。没有解决方法,也没有例外等。您能做的最好的事情是在用户尝试输入不适合number(5, 3) 的值时向他们返回一条错误消息。请注意,如果他们的数字有太多小数,Oracle 会将值四舍五入到小数点后三位 - 这不是问题。问题是整数部分有三位或更多位。
  • @mathguy 感谢您的帮助!

标签: sql oracle


【解决方案1】:

你可以使用这样的东西: 从对偶中选择演员表(512.33333333 as number(5,2));

【讨论】:

    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多