Ошибка SQL: ORA-02291: ограничение целостности - PullRequest
8 голосов
/ 04 декабря 2010

Я создаю базу данных, которая пытается получить доступ к значениям из внешнего ключа. Я создал две следующие таблицы

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 ]

7 голосов
/ 04 декабря 2010

Попробуйте сначала вставить в таблицу TypeComponent, а затем вставить в таблицу Component.

В соответствии с ошибкой:

ORA-02291: нарушение целостности (string.string) нарушено - родительский ключ не найден
Причина: Значение внешнего ключа не соответствует значению первичного ключа.
Действие: Удалитьвнешнего ключа или добавьте соответствующий первичный ключ.

Это означает, что в вашей ссылочной таблице нет соответствующего ключа.

EDIT # 1

Для вашего любопытства, вот сайт, где вы можете получить помощь по всем кодам ошибок Oracle.

http://[ora-02291].ora-code.com/

Вот домашняя страница этого сайта: http://www.ora -code.com /

Где вы можете заменить код ошибки в URL-адресе в соответствии с полученным кодом ошибки, и вы получите доступ к страницеза эту ошибку.

2 голосов
/ 04 декабря 2010

Пожалуйста, опубликуйте весь сеанс 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.
1 голос
/ 02 апреля 2013

Эта ошибка возникает несколько раз при использовании ссылочного ключа (в моем случае это внешний ключ), в котором есть ошибки. Пожалуйста, воссоздайте ссылочный ключ в таблице.

1 голос
/ 04 декабря 2010

В таблице component у вас есть

 TypeID REFERENCES TypeComponent(TypeComponentID)

И затем вы продолжаете с

INSERT INTO Component VALUES(192359823,785404309)

Если вы выполнили это вначале, Oracle выдаст ошибку Integrity constraint, потому чтопытается вставить в таблицу component значение, которого нет в таблице TypeComponent.

Это проблема, потому что вы упомянули, что TypeID является внешним ключом, т. Е. Значение TypeID должно присутствовать в TypeComponent перед вставкой в ​​Component

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...