web-dev-qa-db-ja.com

SQLエラー:ORA-02291:整合性制約

外部キーから値にアクセスしようとしているデータベースを作成しています。次の2つのテーブルを作成しました

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')

これらは2つのテーブルです。 ComponentおよびTypeComponentComponentTypeComponentの親エンティティであり、次のINSERTステートメントを実行しようとしています。

INSERT INTO Component VALUES(192359823,785404309)

しかし、それは私にエラーを与えています

これは、これまでにOracle SQLdevで行ったセッションです。

9
David

最初にTypeComponentテーブルに挿入してから、Componentテーブルに挿入してみてください。

エラーによると:

ORA-02291:整合性制約(string.string)に違反しています-親キーが見つかりません
原因:外部キー値に一致する主キー値がありません。
アクション:外部キーを削除するか、一致する主キーを追加します。

これは、参照されているテーブルに一致するキーがないことを意味します。

編集#1

親切な情報として、ここにすべてのOracleエラーコードのヘルプを得ることができるサイトがあります。

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

このサイトのホームページは次のとおりです:http://www.ora-code.com/

取得したエラーコードに合わせてURLのエラーコードを置き換えることができ、このエラーのページにアクセスできます。

9

エラーを簡単に再現できるように、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.
2

このエラーは、参照されたキー(私の場合は外部キー)で時々発生します。これにはエラーがあります。表に参照されているキーを再作成してください。

1
sergio pachon

componentテーブルには

 TypeID REFERENCES TypeComponent(TypeComponentID)

そして、あなたは続行します

INSERT INTO Component VALUES(192359823,785404309)

これを最初に実行した場合、componentテーブルに存在しない値をTypeComponentテーブルに挿入しようとしているため、OracleはIntegrity constraintエラーをスローします。

TypeIDは外部キーである、つまりTypeIDに挿入する前にTypeComponentの値がComponentに存在する必要があると述べたため、これは問題です。 _

1
Sathyajith Bhat