ORA-02291: родительский ключ не найден при вставке нескольких строк
У меня возникла проблема с выполнением хранимой процедуры, которая делает несколько вставок
Я копирую 30 таблиц с одного сервера на другой с помощью DBLINK:
INSERT INTO table@dblink (column1)
SELECT column1
FROM table;
Но это приводит к:
ORA-02291: ограничение целостности (string.string) нарушено - родительский ключ не найден
В конце процедуры есть только один коммит.
4-я таблица, которую я вставляю, имеет FK для первой и не распознает вставки первой (я пробовал с отложенными ограничениями и той же проблемой: ORA-02291).
1 ответ
Проблема в том, что вы изменяете данные (DML) через db-link. Это может быть плохо управляемым Oracle и вызывать неожиданное поведение. Вы должны сделать это наоборот: вместо того, чтобы помещать данные, перетаскивайте данные через эту db-ссылку и делайте вставки локально. Конечно, вы, вероятно, не можете технически делать то, что вы хотите в целевой базе данных...
Решение, которое у вас есть, состоит в том, чтобы деактивировать FK до вставки, а затем активировать FK.
Однако я не уверен, что этот DDL возможен напрямую через db-link... Возможно, вам потребуется создать процедуру для деактивации FK в целевой базе данных и вызвать ее через db-link.