" ORA-01438:大于此列允许的指定精度的值"插入时3

时间:2013-01-16 11:52:18

标签: sql oracle

尝试将除0以外的任何数字插入格式为NUMBER(2,2)的字段时,我遇到了该错误。

UPDATE
    PROG_OWN.PROG_TPORCENTAJE_MERMA
SET
    PCT_MERMA = 3
WHERE
    IDN_PORCENTAJE_MERMA = 1

[错误代码:1438,SQL状态:22003] ORA-01438:大于此列允许的指定精度的值

COLUMN_NAME DATA_TYPE   TYPE_NAME   COLUMN_SIZE   BUFFER_LENGTH   DECIMAL_DIGITS
PCT_MERMA   3           NUMBER      2             0               2

如果我尝试使用十进制数字,也会发生这种情况。

知道为什么吗?

2 个答案:

答案 0 :(得分:26)

对于数据类型number(2,2),您无法使用大于1的数字进行更新,因为,第一个参数是数字中的总位数,第二个参数(.ie 2此处)是数字小数部分的数字。我想你可以插入或更新数据< 1。即0.12,0.95等。

请在NUMBER Datatype中查看NUMBER DATATYPE。

答案 1 :(得分:19)

NUMBER (precision, scale)表示precision个总位数,其中scale个数字位于小数点右侧。

换句话说,

NUMBER(2,2)表示带有2位数的数字,两者都是小数。您可能需要使用NUMBER(4,2)来获取4位数,其中2位是小数。目前,您只需插入零整数部分的值。

More info at the Oracle docs