【发布时间】: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 感谢您的帮助!