sql - 无法在小数列 SQL 中插入 int 值

标签 sql oracle database-design decimal

目前正在做一个学校项目。

我正在尝试创建下表:

CREATE TABLE Purchase (
ID INT NOT NULL,
Type INT DEFAULT 3 NOT NULL,
Price DECIMAL(5,5) NOT NULL,
CONSTRAINT check_3 CHECK (TYPE = 3),
CONSTRAINT price_check CHECK (Cost>0),
CONSTRAINT pk_1 PRIMARY KEY (ID),
CONSTRAINT fk_1 FOREIGN KEY (ID,Type) REFERENCES Part(ID,Type));

我的问题是当我尝试将值插入此列时。 当我尝试这样做时:

INSERT INTO Purchase VALUES (12, 3, 200);

我收到以下错误:

SQL> INSERT INTO Purchase VALUES (12, 3, 200);
INSERT INTO Purchase VALUES (12, 3, 200)
                                       *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column

我不明白我做错了什么。我不能将整数添加到小数列吗?那是问题所在吗?对我来说意义不大。

感谢您花时间阅读本文!

最佳答案

首先,始终列出插入的列:

INSERT INTO Purchase (id, type, price)
    VALUES (12, 3, 200);

其次,您的价格声明为 DECIMAL(5, 5)。这意味着价格范围从 0.00000 到 0.99999。

据推测,您想要更广泛的范围。我不知道那是什么,但是 DECIMAL(10, 5) 可以解决您的问题。更一般地说,只需 NUMBER 即可解决您在 Oracle 中的问题。

关于sql - 无法在小数列 SQL 中插入 int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54929540/

相关文章:

database-design - 需要有关数据库设计的帮助

sql - 数据库表,一张表引用多个不相关的表

sql - oracle sql开始范围结束范围与计数

php - 将变量从 GET 输入到 SQL 数据库不起作用

SQL:在查询中组合主数据和子数据

c# - 在用 C# 加密的 SQL Anywhere 16 中解密 AES,反之亦然

oracle - Oracle 中的 JDBC 瘦连接字符串同时使用冒号和正斜杠

oracle - 如何使用参数值记录/跟踪 Oracle 存储过程调用?

mysql - 并发插入 mysql - 在第一组插入完成之前调用相同的插入存储过程

mysql - 如何在in子句-mysql中使用数字列表