sql - SQL 错误:“ORA-00947:没有足够的值”
问题描述
为什么我没有得到足够的值错误,因为我使用了自动增量并且没有在插入中添加任何值?
CREATE TABLE Customer(
customerId INTEGER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1) primary key,
firstName VARCHAR2(25) not null,
middleName VARCHAR2(25),
lastName VARCHAR2(25) not null,
dateOfBirth DATE not null,
phoneNumber NUMBER(10) not null,
billingAddress VARCHAR2(35) not null
);
INSERT INTO Customer VALUES
('Sam', null, 'Siqi', (TO_DATE('18/12/1999', 'DD/MM/YYYY')),12345678,
'Smith Street NSW');
解决方案
这是您创建的表。它包含 7 列:
SQL> CREATE TABLE Customer
2 (
3 customerId INTEGER
4 GENERATED ALWAYS AS IDENTITY
5 ( START WITH 1 INCREMENT BY 1)
6 PRIMARY KEY,
7 firstName VARCHAR2 (25) NOT NULL,
8 middleName VARCHAR2 (25),
9 lastName VARCHAR2 (25) NOT NULL,
10 dateOfBirth DATE NOT NULL,
11 phoneNumber NUMBER (10) NOT NULL,
12 billingAddress VARCHAR2 (35) NOT NULL
13 );
Table created.
您的插入尝试失败:
SQL> INSERT INTO Customer
2 VALUES ('Sam',
3 NULL,
4 'Siqi',
5 (TO_DATE ('18/12/1999', 'DD/MM/YYYY')),
6 12345678,
7 'Smith Street NSW');
INSERT INTO Customer
*
ERROR at line 1:
ORA-00947: not enough values
为什么失败了?因为您插入了6 个值,而表有7 列。总是,但总是指定所有涉及的列。这包括select
你写(即避免select *
)和 - 在这种情况下 - insert
。所以:
SQL> INSERT INTO Customer (firstname,
2 middlename,
3 lastname,
4 dateofbirth,
5 phonenumber,
6 billingaddress)
7 VALUES ('Sam',
8 NULL,
9 'Siqi',
10 (TO_DATE ('18/12/1999', 'DD/MM/YYYY')),
11 12345678,
12 'Smith Street NSW');
1 row created.
SQL>
现在它起作用了。
自动生成的事实customerid
并不意味着您可以跳过它。
是的,您可以使用default
(正如阿南德的回答所暗示的那样),但在我看来,这是不好的做法。正如我所说:始终命名您正在使用的所有列。
SQL> INSERT INTO customer
2 VALUES (DEFAULT,
3 'Sam',
4 NULL,
5 'Siqi',
6 (TO_DATE ('18/12/1999', 'DD/MM/YYYY')),
7 12345678,
8 'Smith Street NSW');
1 row created.
SQL>
推荐阅读
- flutter - 如何在 agora Flutter 中将用户添加到同一频道?
- python - Tkinter 绑定"
“对” " - libcurl - 在 lnav 日志文件导航器的自定义格式化程序中访问 json 正文参数
- r - 我不知道如何修复 tidymodel 错误
- angular - 在 angualr 8 中处理长 Web 请求
- javascript - 使用 Electron 将 Angular、Express js 和 PostgreSql 网站转换为离线桌面应用程序
- encryption - 如何使用任何工具将十秒的静止图像添加到 mp4 文件?
- python - 无法从 sklearn.ensemble 导入任何内容
- sql - REGEXP 验证特定数字
- javascript - 使用事件监听器转到网站中的某个位置