2013-11-29 37 views
-2

我试图创建一些表并设置外键,但我一直遇到外键问题。SQL错误:“名称已被现有约束使用”

在我前面创建的下表,它工作正常

CREATE TABLE inpatient 
(PatientNo varchar(6) NOT NULL, 
WardNo number(2), 
BedNo number(3) NOT NULL, 
OnWaitingList date, 
WardRequired varchar(25), 
ExpectStayInDays number(4), 
DatePlaced date, 
DateLeave date, 
ActualLeave date, 

constraint PatientFK foreign key (PatientNo)  references Patient (patientNo), 

constraint bedFK foreign key (BedNo)  references Bed (bedNo)); 

通知2日最后一行使用patientFK的。

然后我接着创建另一个表

CREATE TABLE NOK 
(PatientNo varchar(6) NOT NULL, 
NOKFullName varchar(25), 
NOKRelationship varchar(25), 
NOKTelephone number(11), 
NOKStreetAddress varchar(25), 
NOKSuburb varchar(25), 
NOKState char(2), 
NOKPostCode number(4), 


constraint patientFK foreign key (PatientNo) 
references Patient (patientNo)); 

,我得到了以下错误消息

错误报告: SQL错误:ORA-02264:已经由现有的约束名 02264 。00000 - “名称已被现有约束使用” *原因:指定的约束名称必须是唯一的。 *操作:为约束指定一个唯一约束名称。

我不知道如何解决它或找到可以提出解决方案的类似示例。

+0

试举一些别称表'NOK' – Rohaan

回答

2

约束的名称(在这种情况下为PatientFK)在数据库中是唯一的。您已经使用过一次,所以当您尝试再次使用它时,您会收到错误消息。只要给你设置你的NOK表不同的名称约束:

也许:

constraint patientFK_nok foreign key (PatientNo) 
+0

如果我这样做的外键,它是否会影响我如何填充表格或将来转介它? 我注意到使用postgresql完成的一个类似的例子,使用与我相同的语句,但显然没有任何问题。它与其他版本的SQL有什么不同? – user3048302

+0

唯一的区别应该是用于引用约束的名称,如果需要删除或修改它。既然你不能使用与其他约束相同的名字,你的选择只是改变名字或者根本不使用约束。 SQL的不同实现具有不同的限制和设施。我不能为Postgres发言,但这种差异并不令人惊讶。 – 2013-11-29 10:17:15