朋友,我是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.
由于
答案 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)
);