Oracle不会在插入时自动生成主键

时间:2019-03-01 14:49:45

标签: sql oracle primary-key

这里是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 )该值需要插入什么?

2 个答案:

答案 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
);