Oracle не генерирует первичный ключ автоматически при вставке - PullRequest
0 голосов
/ 01 марта 2019

Новый для 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 field)?Если нет, как я могу сказать ( точный SQL ), что нужно вставить для этого значения?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Я смог использовать ids.nextval, и моя вставка прекрасно работает:

INSERT INTO Widgets (
  id,
  ruleId,
  customerId
) VALUES (
  ids.nextval,
  88471239,
  null
);
0 голосов
/ 01 марта 2019

Простое объявление чего-либо в качестве первичного ключа не приводит к генерированию значения.В Oracle 12C вы можете использовать:

id  integer generated always as identity primary key

В более ранних версиях вы делали это с помощью триггера.

...