这是您创建的表。它包含 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>