12

外部キーから値にアクセスしようとしているデータベースを作成しています。次の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 つのテーブルです。ComponentTypeComponentComponentは の親エンティティTypeComponentであり、次の INSERT ステートメントを実行しようとしています:

INSERT INTO Component VALUES(192359823,785404309)

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

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

4

4 に答える 4

11

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

エラーによると:

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

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

編集#1

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

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

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

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

于 2010-12-03T21:14:11.490 に答える
3

エラーを簡単に再現できるように、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.
于 2010-12-03T21:08:42.863 に答える
1

componentテーブルにあなたが持っている

 TypeID REFERENCES TypeComponent(TypeComponentID)

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

INSERT INTO Component VALUES(192359823,785404309)

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

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

于 2010-12-03T21:12:41.867 に答える
1

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

于 2013-04-01T20:49:03.967 に答える