внешний ключ оракула возвращает ноль - PullRequest
0 голосов
/ 30 апреля 2018

В настоящее время я сталкиваюсь с проблемой ограничений оракула. ​​

После отправки вставки мои ограничения внешнего ключа не будут срабатывать. Он должен дать двум таблицам одинаковый идентификатор, но, к сожалению, только одна таблица с первичным ключом дает идентификатор. Столбец с внешним ключом во второй таблице остается нулевым.

Для экземпляра: вставить в таблицу значения t1 (t1_id, name, dpt) (значение1 (триггер с автоинкрементом для идентификатора), значение2, значение3); Та же процедура находится за таблицей 2, таблицей 3 ... Все ограничения записаны правильно

Таблица 1 (Emp)

ID  Name  Department
1   Joe   HR                          

Таблица 2 (Проекты)

ID  Project EmpID
1   new     (null) -> must be 1

Спасибо заранее.

Ограничение: ALTER TABLE "PROJECTS" ADD CONSTRAINT "EMP_FK" FOREIGN KEY ("EMP_ID") REFERENCES "EMP" ("EMP_ID") ON DELETE CASCADE ENABLE

Триггер: create or replace TRIGGER Projects_TRG BEFORE INSERT ON Projects FOR EACH ROW BEGIN :NEW.Project_ID := Projects_SEQ.NEXTVAL; END;

Как мне заполнить родительский идентификатор из родительской таблицы в дочернюю таблицу?

Обратите внимание, что я использовал разные имена в своем приложении.

1 Ответ

0 голосов
/ 30 апреля 2018

Похоже, вы неправильно поняли цель ограничения внешнего ключа. Ограничение внешнего ключа НЕ автоматически распространяет значения ограничения из родительской таблицы в дочернюю таблицу. Целью ограничения является обеспечение того, чтобы значения ключевого столбца в дочерней таблице при заполнении имели совпадающие значения в ключевом столбце родительской таблицы. Ваше приложение отвечает за обеспечение того, чтобы ключевой столбец в дочерней таблице заполнялся соответствующим значением. Ограничение не делает это для вас. Также вполне допустимо иметь значение NULL в ключевом столбце дочерней таблицы, при условии, что для столбца дочерней таблицы нет ограничения NOT NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...