外部キーから値にアクセスしようとしているデータベースを作成しています。次の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
およびTypeComponent
。 Component
はTypeComponent
の親エンティティであり、次のINSERTステートメントを実行しようとしています。
INSERT INTO Component VALUES(192359823,785404309)
しかし、それは私にエラーを与えています
これは、これまでにOracle SQLdevで行ったセッションです。
最初に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)
これを最初に実行した場合、component
テーブルに存在しない値をTypeComponent
テーブルに挿入しようとしているため、OracleはIntegrity constraint
エラーをスローします。
TypeID
は外部キーである、つまりTypeID
に挿入する前にTypeComponent
の値がComponent
に存在する必要があると述べたため、これは問題です。 _