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

Lay*_*ros -2 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             );
Run Code Online (Sandbox Code Playgroud)

结果:

    1,*
ERROR at line 6:
ORA-01438: value larger than specified precision allowed for this column
Run Code Online (Sandbox Code Playgroud)

Tim*_*sen 6

我相信错误实际上是由您NUMBER为某些列声明类型的方式引起的:

NUMBER(3,4)
Run Code Online (Sandbox Code Playgroud)

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

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

NUMBER(7, 4)
Run Code Online (Sandbox Code Playgroud)

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