Ошибка ORA-01400 при выполнении запроса INSERT INTO

У меня есть 2 стола ISSUENCE и SKLAD.

В таблице ISSUENCE я пытаюсь сделать запрос на вставку названия элемента из таблицы SKLAD по его ID. Значения, внесенные в таблицу ISSUENCE:

ISSUE_ID, EPLOYEES_EMP_ID, SKLAD_ITEM_ID

Используемый запрос:

INSERT INTO issuence (issue_item_name) 
    SELECT item_name 
    FROM sklad, issuence 
    WHERE item_id = sklad_item_id;

Но я получаю эту ошибку:

ORA-01400: невозможно вставить NULL в ("SKLAD"."ISSUENCE"."ISSUE_ID")

Таблицы выглядят так:

ВЫПУСК:

СКЛАД:

Привет - что насчет сообщения об ошибке вам неясно? Если вы посмотрите на определение таблицы, вы увидите, какие столбцы не могут быть обнулены.

NickW 08.04.2023 19:18

Вы пытаетесь вставить NULL в ISSUE_ID, но "не можете вставить NULL в ("SKLAD"."ISSUENCE"."ISSUE_ID")". В чем, кажется, беда?

markalex 08.04.2023 19:19
Вредные привычки: использование JOIN в старом стиле - этот старый стиль списка таблиц, разделенных запятыми, был заменен правильным синтаксисом ANSI JOIN в стандарте SQL ANSI-92 (более 30 лет назад) и его использование не рекомендуется
marc_s 08.04.2023 19:33

Вы пытаетесь вставить новые строки в таблицу ISSUENCE или обновить ISSUE_ITEM_NAME существующих строк, используя значение ITEM_NAME в таблице SKLAD?

dgg 08.04.2023 19:49
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
4
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не опубликовали всю информацию об этой схеме, но, глядя на опубликованные вами скриншоты, кажется, что item_id является первичным ключом в таблице sklad, на которую затем ссылается столбец sklad_item_id из issuence. Кроме того, issue_id, вероятно, является столбцом первичного ключа в issuence. В данном случае не имеет значения, employees_emp_id выглядит как еще один столбец внешнего ключа.

Поскольку вы используете 11g, столбцы первичного ключа не являются столбцами идентификаторов, и их значение не может быть сгенерировано автоматически декларативным образом. Это означает, что вам нужно либо указать значения первичного ключа при вставке строк в таблицы, либо использовать триггеры базы данных, которые сделают это.

Создайте таблицы:

SQL> create table sklad
  2  (item_id           integer constraint pk_sklad primary key,
  3   item_name         varchar2(500),
  4   form_size         varchar2(10),
  5   item_quantity     integer
  6  );

Table created.

SQL> create table issuence
  2  (issue_id          integer constraint pk_iss primary key,
  3   employees_emp_id  integer not null,
  4   sklad_item_id     integer constraint fk_iss_sklad references sklad (item_id) not null,
  5   issue_date        date,
  6   issue_period_days integer,
  7   issue_quantity    integer,
  8   issue_item_name   nvarchar2(200)
  9  );

Table created.

Последовательность будет использоваться для столбцов первичного ключа:

SQL> create sequence seq_is;

Sequence created.

Пример sklad ряда:

SQL> insert into sklad (item_id, item_name) values (seq_is.nextval, 'Some name');

1 row created.

Вот где вы получили ошибку: вы должны предоставить значения столбцам NOT NULL, так или иначе (триггер или вручную). Вот пример:

SQL> insert into issuence (issue_id, employees_emp_id, sklad_item_id)
  2  select seq_is.nextval, 100, s.item_id
  3  from sklad s
  4  where s.item_id = (select min(a.item_id)
  5                      from sklad a);

1 row created.

SQL> select * from issuence;

  ISSUE_ID EMPLOYEES_EMP_ID SKLAD_ITEM_ID ISSUE_DATE ISSUE_PERIOD_DAYS ISSUE_QUANTITY ISSUE_ITEM
---------- ---------------- ------------- ---------- ----------------- -------------- ----------
         2              100             1

SQL>

Другие вопросы по теме