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



朋友们,我是SQL新手,我找不到问题的答案

我正在尝试使用 SQL Developer(版本 4,build 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);

结果我在通信列中看到 0。当我尝试插入数字 1.35 时,它四舍五入为 1。

谢谢

decimal数据类型需要小数位数和精度。 "刻度"是小数点后的位数。

如果未指定 scale 的值,则默认为 0 - 本质上是一个整数。 (精度默认为 5。

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

检查 Oracle 文档中的 DECIMAL,它说:

"如果未指定比例,则默认比例为 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)
  );

最新更新