使用SQL Developer将DECIMAL类型插入Oracle DB

时间:2017-01-13 13:16:05

标签: sql oracle oracle-sqldeveloper rounding

朋友,我是SQL新手,我无法找到问题的答案

我正在尝试使用SQL Developer(版本4,版本15)插入十进制数字,但SQL Developer会自动舍入我的数字。我的测试数据库是OracleXE112_Win64。

示例:

CREATE TABLE salespeople
  (
    snum  INTEGER NOT NULL PRIMARY KEY,
    sname CHAR(15) NOT NULL,
    city  CHAR(15) NOT NULL,
    comm  DECIMAL
  );

然后

insert into SALESPEOPLE 
values (1001, 'Peel', 'London', .12);
insert into SALESPEOPLE 
values (1002, 'Serres', 'San Jose', .13);
insert into SALESPEOPLE 
values (1004, 'Motika', 'London', .11);
insert into SALESPEOPLE 
values (1007, 'Rifkin', 'Barcelona', .15);
insert into SALESPEOPLE 
values (1003, 'Axelrod', 'New York', .10);

结果我在 comm 列中看到 0 。 当我试图插入数字 1.35 时,它会四舍五入为1.

由于

2 个答案:

答案 0 :(得分:2)

decimal数据类型需要比例和精度。 “Scale”是小数点后的位数。

如果未指定scale的值,则默认为0 - 基本上为整数。 (精确度默认为5。)

通常,Oracle数据库使用number而不是decimal。但是,如果您需要decimal,请指定适当的比例和精度。

答案 1 :(得分:1)

检查DECIMAL的Oracle文档,它说:

“如果未指定比例,则默认比例为0.如果未指定精度,则默认精度为5.”

精确度是:“小数点左侧和右侧的总位数”。

比例是:“小数分量的位数”。

这意味着因为您的默认比例为0,所以所有数字都舍入为整数。

要解决此问题,您需要为数据指定SCALE。我见过的大多数情况都由DECIMAL(18,5)来说足够了,而且从您的示例查询来看,这应该没问题。

因此,只需将表格定义更改为:

CREATE TABLE salespeople
  (
    snum  INTEGER NOT NULL PRIMARY KEY,
    sname CHAR(15) NOT NULL,
    city  CHAR(15) NOT NULL,
    comm  DECIMAL(18,5)
  );