ORA-02291: Нарушено ограничение целостности — родительский ключ не найден
OracleЧто это значит?
Нарушено ограничение внешнего ключа. Не найдена родительская строка, соответствующая значению, вставленному в дочернюю таблицу; то есть запись, на которую выполняется ссылка, не существует.
Почему возникает?
INSERT/UPDATE со ссылкой на несуществующую родительскую запись, строка родительской таблицы ещё не вставлена, неверный порядок загрузки (дочерние раньше родительских) или несовпадение из-за различий в регистре или пробелах.
Как исправить
Сначала вставьте соответствующую запись в родительскую таблицу, затем в дочернюю. Убедитесь, что ссылка существует: SELECT * FROM parent_table WHERE key_col = value; При массовой загрузке обрабатывайте таблицы в правильном порядке (сначала родительские). Чтобы найти нарушающую строку, сравните значение в дочерней таблице с родительской с помощью NOT IN / anti-join.
Ещё по этой СУБД
- ORA-00604Ошибка на уровне рекурсивного SQL
- ORA-01438Значение превышает точность, допустимую для этого столбца
- ORA-01400Невозможно вставить NULL в (столбец)
- ORA-02292Нарушено ограничение целостности — найдена дочерняя запись
- ORA-00979Выражение не входит в GROUP BY (not a GROUP BY expression)
- ORA-00918Столбец определён неоднозначно
- ORA-06550Строка/столбец PLS-...: ошибка компиляции PL/SQL