PLSQL:ORA-01438:大于此列允许的指定精度的值

时间:2016-03-26 06:54:48

标签: oracle

请检查我在oracle中的插入。

SQL> desc post;
 Name                                      Null?    Type
 ----------------------------------------- -------- --------------------

 POST_BY                                   NOT NULL NUMBER(15)
 POST_NO                                   NOT NULL NUMBER(8)
 TEXT                                               VARCHAR2(500)
 LANTITUDE                                          NUMBER(3,4)
 LONGITUDE                                          NUMBER(3,4)
 NO_LIKE                                            NUMBER(6)
 POST_DATE                                          DATE

SQL>  INSERT INTO post
  2             values(
  3                     1,
  4                     1,
  5                     'Say somthing from user ',
  6                     1,
  7                     1,
  8                     0,
  9                     sysdate
 10             );

结果:

    1,*
ERROR at line 6:
ORA-01438: value larger than specified precision allowed for this column

2 个答案:

答案 0 :(得分:6)

我认为错误实际上是由您为某些列声明NUMBER(3,4) 类型的方式引起的:

NUMBER(7, 4)

这是定义一个精度为3位有效数字的数字,其中4位出现在小数位后面,其中-1位出现在小数位之前。仔细阅读最后一句,直到你明白为什么它不适用于值1.(如果你试图插入值0.002虽然...最多四个小数位,它会工作正常,并且第一个必须为零。)

如果您想为纬度和经度值提供4位小数精度,请使用以下定义:

{{1}}

这意味着小数位前3位数和小数位后4位数。

答案 1 :(得分:0)

此错误即将发生,因为您使用数字(3,4)作为其数据类型。数字(3,4)表示有3位有效数字和小数点后4位数。更改它。我认为它会起作用。< / p>