SQL错误:ORA-02291:完整性约束

时间:2010-12-03 21:04:28

标签: sql oracle 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')

这是两张桌子。 ComponentTypeComponentComponentTypeComponent的父实体,我正在尝试运行以下INSERT语句:

INSERT INTO Component VALUES(192359823,785404309)

但它给了我错误

这是我在Oracle SQL dev

中到目前为止的会话

4 个答案:

答案 0 :(得分:6)

首先尝试插入TypeComponent表格,然后插入Component表格。

根据错误:

  违反

ORA-02291:完整性约束(string.string) - 未找到父密钥

  原因:外键值没有匹配的主键值   操作:删除外键或添加匹配的主键。

这意味着您引用的表中没有匹配的键。

编辑#1

有关您的信息,请访问以下网站,您可以从中获得有关所有Oracle错误代码的帮助。

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

以下是此网站的主页: http://www.ora-code.com/

您可以在其中替换URL中的错误代码以适应您获得的错误代码,并且您将访问该页面以查找此错误。

答案 1 :(得分:2)

请发布您的整个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)

component表格中

 TypeID REFERENCES TypeComponent(TypeComponentID)

然后继续

INSERT INTO Component VALUES(192359823,785404309)

如果您先执行此操作,那么Oracle将抛出Integrity constraint错误,因为您试图在component表中插入TypeComponent表中不存在的值。

这是一个问题,因为您已经提到TypeID是外键,即在插入TypeID之前TypeComponent需要Component的值

答案 3 :(得分:1)

这个错误在引用的密钥(在我的情况下是外键)中有时会出现这个错误。请在表格中重新创建引用的密钥。