我的数字精度和比例我做错了什么?

时间:2017-12-17 15:36:12

标签: sql oracle precision

我试图在Oracle SQL Developer中插入以下语句:

INSERT INTO ACC
VALUES (1245890, 234.50, 'Broomhill', '15-NOV-2003', 100.00);

该语句插入得足够好而没有错误,但是在查看数据视图时,我注意到该行显示的第二个和第四个值少了一个小数点。

(当它应该是234.50和100.00时,例如234.5和100.0)

我尝试在我的表创建代码中增加精度和比例以允许它正确显示。

CREATE TABLE ACC
(
"ACCNO" NUMBER(7),
"BALANCE" NUMBER(5,2),
"BRANCH" VARCHAR(15),
"OPENED" DATE,
"BONUS" NUMBER(5,2)
);

我稍微更改了BALANCE和BONUS数据类型

CREATE TABLE ACC
(
"ACCNO" NUMBER(7),
"BALANCE" NUMBER(5,3)
"BRANCH" VARCHAR(15),
"OPENED" DATE,
"BONUS" NUMBER(5,3)
);

但我得到一个错误说:

Error starting at line : 94 in command -
INSERT INTO ACC
VALUES (1245890, 234.50, 'Broomhill', '15-NOV-2003', 100.00)
Error report -
ORA-01438: value larger than specified precision allowed for this column

我的代码出了什么问题?如何编写它以便正确显示我的值?

2 个答案:

答案 0 :(得分:3)

NUMBER(5, 3)是一个数字,其中有五位数字,小数点右边有三位数字 - 所以两个位于左侧。值“100.00”左侧有三个,因此不适合。

您似乎想要:NUMBER(6, 3)

答案 1 :(得分:2)

数字已正确存储到表中,但它们不会以您希望的方式显示,因此您必须使用正确的格式掩码。这是一个例子:

SQL> select to_char(234.50, '990D00') val_1,
  2         to_char(100, '990D00') val_2
  3  from dual;

VAL_1   VAL_2
------- -------
 234,50  100,00

SQL>

这是SQL * Plus;您可以在其他(Oracle)工具中设置它,例如Forms,Reports,Apex等,通常在item的Property Palette窗口中。

查看格式模型,https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm