这里是Oracle的新手。我有一个使用以下SQL创建的表:
create table Widgets (
id integer constraint pkWidgets primary key using index,
ruleId integer not null,
customerId integer constraint fkWidgets_Customers references Customers
);
我现在正在尝试通过以下方式向该表中插入一条记录:
INSERT INTO Widgets (
ruleId,
customerId
) VALUES (
88471239,
null
);
并出现以下错误:
INSERT INTO Widgets not successful
An error occurred when executing the SQL command:
INSERT INTO Widgets (
ruleId,
customerId...
ORA-01400: cannot insert NULL into ("MYSCHEMA"."WIDGETS"."ID") [SQL State=23000, DB Errorcode=1400]
1 statement failed.
Execution time: 0.13s
这是怎么回事? Oracle是否不应该自动生成我的主键(id
字段)值?如果没有,我怎么知道(确切的SQL )该值需要插入什么?
答案 0 :(得分:2)
仅将某些内容声明为主键不会导致生成该值。在Oracle 12C中,您可以使用:
id integer generated always as identity primary key
在早期版本中,您将使用触发器来执行此操作。
答案 1 :(得分:0)
我能够使用ids.nextval
,并且插入效果很好:
INSERT INTO Widgets (
id,
ruleId,
customerId
) VALUES (
ids.nextval,
88471239,
null
);