Ошибка 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

Другие вопросы по тегам