违规 - 未找到父密钥02291. 00000 - “完整性约束

时间:2010-12-06 13:52:26

标签: sql oracle

您好我正在Oracle SQL开发中开发一个数据库,即尝试从另一个表访问foriegn密钥。我目前正在使用以下CREATE语句

创建的ItemOrdered表
CREATE TABLE ItemOrdered(OrderID varchar2(9) REFERENCES Ords(OrderID),
BeltID varchar2(9) REFERENCES BeltID(BeltID), 
Quantity varchar(4) NOT NULL,
PRIMARY KEY(OrderID, BeltID))

你可以看到我有以下foriegn键Ords和BeltID。

现在,当我尝试运行以下语句时

INSERT INTO ItemOrdered VALUES(401565981,234489212,'2')

它给我以下错误

  

违反 - 未找到父密钥   02291. 00000 - “违反完整性约束(%s。%s) - 未找到父键”

如果需要

,我已经提供了我的Ords CREATE语句
  CREATE TABLE Ords(OrderID varchar2(9) PRIMARY KEY, 
CustomerID varchar(9) REFERENCES Customers(CustomerID), 
    Expected_Delivery_Date date DEFAULT sysdate NOT NULL, 
Actual_Delivery_Date date DEFAULT sysdate NOT NULL, 
    Payment_Due_Date date DEFAULT sysdate NOT NULL, 
Order_Date date DEFAULT sysdate NOT NULL, Price Varchar(10), 
    Order_Placed varchar2(1) CONSTRAINT OrderPlaced 
CHECK(Order_Placed IN('Y','N')) NOT NULL, 
Order_Confirmed varchar2(1)
    CONSTRAINT Order_Confirmed CHECK(Order_Confirmed IN('Y','N')) NOT NULL, 
Order_Completed varchar2(1) CONSTRAINT Order_Completed
    CHECK(Order_Completed IN('Y','N')) NOT NULL)

我还提供了我的BeltID CREATE语句

    CREATE TABLE BeltID(BeltID varchar2(9) PRIMARY KEY, 
BeltLengthID varchar2(9) REFERENCES BeltLength(BeltLengthID), 
    ColourID varchar2(9) REFERENCES Colour(ColourID), 
DesignID varchar2(9) REFERENCES Design(DesignID),ComponentID varchar2(9) REFERENCES Component(ComponentID))

我似乎不太明白为什么我会收到此错误。有明确的解释原因吗?

这是我想要做的http链接。 link text

2 个答案:

答案 0 :(得分:8)

由于您在创建表ItemOrdered时指定了外键约束,因此在执行此插入时:

INSERT INTO ItemOrdered VALUES(401565981,234489212,'2')

...值401565981和234489212必须分别对应Ords和BelitId表中的键值 - 即这两个查询应返回行:

select *
from Ords
where OrderId = 401565981;

select *
from BeltId
where BeltId = 234489212;

错误消息表明情况并非如此。

答案 1 :(得分:1)

我没有可用的Oracle安装,所以我无法测试,但是如果你将OrderID和BeltID用单引号括起来是否很重要(你应该这样做,因为列被声明为varchars)?我没有对它进行过测试,但有一个想法就是Oracle barfs在你将数值插入varchar列这一事实。

insert 
  into ItemOrdered VALUES('401565981', '234489212','2')

另一种选择是表中列的顺序与您在insert语句中给出的顺序不对应。要对此进行排除,请尝试将语句重写为:

insert 
  into ItemOrdered(OrderID,BeltID,Quantity) values('401565981', '234489212','2')