ORA-02291: родительский ключ не найден при вставке нескольких строк - PullRequest
0 голосов
/ 27 августа 2018

У меня проблема с выполнением хранимой процедуры, которая выполняет несколько вставок

Я копирую 30 таблиц с экземпляра сервера на другой с помощью DBLINK:

INSERT INTO table@dblink (column1)
         SELECT column1
         FROM table;

Но это приводит к:

ORA-02291: ограничение целостности (string.string) нарушено - родительский ключ не найден

В конце процедуры есть только один коммит.

4-я таблица, которую я вставляю, имеет FK для первой и не распознает вставки первой (я пробовал с отложенными ограничениями и той же проблемой: ORA-02291).

1 Ответ

0 голосов
/ 27 августа 2018

Проблема в том, что вы изменяете данные (DML) через db-link. Это может быть плохо управляемым Oracle и вызывать неожиданное поведение. Вы должны сделать это наоборот: вместо того, чтобы помещать данные, перетаскивайте данные через эту db-ссылку и делайте вставки локально. Конечно, вы, вероятно, не можете технически делать то, что вы хотите в целевой базе данных ...

Решение, которое у вас есть, - деактивировать FK перед вставкой, а затем активировать FK.

Однако я не уверен, что этот DDL возможен напрямую через db-link ... Возможно, вам потребуется создать процедуру для деактивации FK в целевой базе данных и вызвать ее через db-link.

...