Ошибка SQL: ORA-02291: ограничение целостности
Я создаю базу данных, которая пытается получить доступ к значениям из внешнего ключа. Я создал две следующие таблицы
CREATE TABLE Component(
ComponentID varchar2(9) PRIMARY KEY
, TypeID varchar2(9) REFERENCES TypeComponent(TypeComponentID)
)
INSERT INTO Component VALUES(192359823,785404309)
INSERT INTO Component VALUES(192359347,785404574)
INSERT INTO Component VALUES(192359467,785404769)
INSERT INTO Component VALUES(192359845,785404867)
INSERT INTO Component VALUES(192359303,785404201)
INSERT INTO Component VALUES(192359942,785404675)
CREATE TABLE TypeComponent (
TypeComponentID varchar2(9) PRIMARY KEY
, Type_Description varchar2(30) CONSTRAINT Type_Description
CHECK(Type_Description IN('Strap', 'Buckle', 'Stud')) NOT NULL
)
INSERT INTO TypeComponent VALUES(785404309, 'Strap')
INSERT INTO TypeComponent VALUES(785404574, 'Stud')
INSERT INTO TypeComponent VALUES(785404769, 'Buckle')
INSERT INTO TypeComponent VALUES(785404867, 'Strap')
INSERT INTO TypeComponent VALUES(785404201, 'Buckle')
INSERT INTO TypeComponent VALUES(785404675, 'Stud')
Это две таблицы. Component
а также TypeComponent
, Component
является родительским объектом для TypeComponent
и я пытаюсь выполнить следующую инструкцию INSERT:
INSERT INTO Component VALUES(192359823,785404309)
но это дает мне ошибку
Это сеанс, который я до сих пор в Oracle SQL Dev
4 ответа
Попробуйте вставить в свой TypeComponent
стол, а затем вставьте в свой Component
Таблица.
По ошибке:
ORA-02291: ограничение целостности (string.string) нарушено - родительский ключ не найден
Причина: Значение внешнего ключа не соответствует значению первичного ключа.
Действие: Удалите внешний ключ или добавьте соответствующий первичный ключ.
Это означает, что в вашей ссылочной таблице нет соответствующего ключа.
РЕДАКТИРОВАТЬ #1
Для вашей любезной информации, вот сайт, где вы можете получить помощь со всеми кодами ошибок Oracle.
http://[ora-02291].ora-code.com/
Вот домашняя страница для этого сайта: http://www.ora-code.com/
Где вы можете заменить код ошибки в URL-адресе в соответствии с полученным кодом ошибки, и вы получите доступ к странице с этой ошибкой.
Пожалуйста, опубликуйте весь сеанс SQLPLUS, чтобы ошибка легко воспроизводилась.
Похоже, что вставка в дочернюю таблицу выполняется до вставки в родительскую таблицу, которая вызывает эту ошибку.
Измените порядок вставок и повторите код.
SQL> CREATE TABLE TypeComponent(
2 TypeComponentID varchar2(9) PRIMARY KEY,
3 Type_Description varchar2(30)
4 CONSTRAINT Type_Description CHECK(Type_Description IN('Strap', 'Buckle', 'Stud')) NOT NULL
5 )
6 ;
Table created.
SQL> CREATE TABLE Component(
2 ComponentID varchar2(9) PRIMARY KEY,
3 TypeID varchar2(9) REFERENCES TypeComponent(TypeComponentID)
4 )
5 ;
Table created.
SQL> INSERT INTO Component VALUES(192359823,785404309);
INSERT INTO Component VALUES(192359823,785404309)
*
ERROR at line 1:
ORA-02291: integrity constraint (COAMGR.SYS_C002513823) violated - parent key
not found
SQL> INSERT INTO TypeComponent VALUES(785404309, 'Strap');
1 row created.
SQL> INSERT INTO Component VALUES(192359823,785404309);
1 row created.
SQL> commit;
Commit complete.
Эта ошибка присутствует несколько раз с указанным ключом (внешний ключ в моем случае), в котором есть ошибки. Пожалуйста, воссоздайте ссылочный ключ в таблице.
В component
стол у вас есть
TypeID REFERENCES TypeComponent(TypeComponentID)
И тогда вы продолжите с
INSERT INTO Component VALUES(192359823,785404309)
Если вы выполнили это первым, то Oracle скинет Integrity constraint
ошибка, потому что вы пытаетесь вставить в component
таблица значения, которого нет в TypeComponent
Таблица.
Это проблема, потому что вы упомянули, что TypeID
является внешним ключом, т. е. значением TypeID
должен присутствовать в TypeComponent
перед вставкой в Component