Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 违反-未找到父密钥02291。00000-“第;完整性约束_Sql_Oracle - Fatal编程技术网

Sql 违反-未找到父密钥02291。00000-“第;完整性约束

Sql 违反-未找到父密钥02291。00000-“第;完整性约束,sql,oracle,Sql,Oracle,您好,我正在Oracle SQL开发中开发一个数据库,它试图从另一个表访问外键。我目前正在使用下面的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))

您好,我正在Oracle SQL开发中开发一个数据库,它试图从另一个表访问外键。我目前正在使用下面的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))
INSERT INTO ItemOrdered VALUES(401565981,234489212,'2')
    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))
正如你所看到的,我有以下外键Ords和BeltID

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

CREATE TABLE ItemOrdered(OrderID varchar2(9) REFERENCES Ords(OrderID),
BeltID varchar2(9) REFERENCES BeltID(BeltID), 
Quantity varchar(4) NOT NULL,
PRIMARY KEY(OrderID, BeltID))
INSERT INTO ItemOrdered VALUES(401565981,234489212,'2')
    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))
它给了我以下的错误

违反-未找到父密钥 229100000-“违反了完整性约束(%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 ItemOrdered(OrderID varchar2(9) REFERENCES Ords(OrderID),
BeltID varchar2(9) REFERENCES BeltID(BeltID), 
Quantity varchar(4) NOT NULL,
PRIMARY KEY(OrderID, BeltID))
INSERT INTO ItemOrdered VALUES(401565981,234489212,'2')
    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链接。

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

INSERT INTO ItemOrdered VALUES(401565981,234489212,'2')
。。。值401565981和234489212必须分别对应于Ords和BelitId表中的键值-即,这两个查询应返回行:

select *
from Ords
where OrderId = 401565981;

select *
from BeltId
where BeltId = 234489212;

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

我没有可用的Oracle安装,因此无法进行测试,但如果将OrderID和BeltID括在单引号中(因为列声明为varchars,所以无论如何都应该这样做),这有关系吗?我还没有对它进行测试,但有一个想法是Oracle会对您正在将数值插入varchar列这一事实感到厌烦

insert 
  into ItemOrdered VALUES('401565981', '234489212','2')
另一种选择是表中列的顺序与您在insert语句中给出的顺序不一致。要排除这种情况,请尝试将语句重写为:

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

请缩进你的问题。SQL查询非常长-将它们拆分为更多行。我编辑了包含超链接的帖子,以展示我正在尝试做的一个示例。查看图像,您可以看到ComplaintID和DepartmentID。我现在正在尝试执行我在投诉表中所做的操作,但使用ItemOrdered。我提供超链接是为了让事情更清楚一点。对不起,超链接不能让我更清楚一点!您试图做的是将数据插入到一个具有外键的表中,并且您得到了一个外键冲突。显然,我不知道您的知识水平,所以如果这听起来很粗鲁,我很抱歉,但是-您知道外键是什么吗?是的,我知道,外键是两个表之间的引用约束。我只是想从父表中访问BeltID和OrdsID,并使它们成为一个组合键,如上所示。在您的第一个回答中强调了“值401565981和234489212必须对应于Ords和BeltID表中的键值”查看了我的表,并且Ords和BeltID中的值都对应。错误消息应该告诉您违反的约束的名称,例如“完整性约束”(MYSCHEMA.MYTABLE_FK1)违反了-未找到父密钥“”。它不应该实际显示“%s.%s”。您是否确实在消息中看到“%s.%s”?是的,我确实看到“%s.%s”此处的消息是我当前正在处理的内容的超链接。我尝试了不使用单引号括起OrderID和BeltID。我尝试了此操作,但它仍然提供了与其他选项相同的错误。