Oracle - 引用列的数量必须与引用的列匹配

时间:2017-10-23 09:28:51

标签: sql oracle

create table Supplier(
SuppId number(5),
SuppName VARCHAR2(15),
Suppaddress VARCHAR2(50),
SuppCity VARCHAR(15),
Supppostcode number(4),
SuppPhone VARCHAR(15),
CONSTRAINT pk_supplier PRIMARY KEY (SuppId)
);

create table Item(
ItemId  number(5),
Itemname VARCHAR2(15),
Size1 VARCHAR2(4),
Color VARCHAR2(10),
price number(4),
numstock number(3),
CONSTRAINT pk_item PRIMARY KEY (ItemId)
);

create table Supplier_Item(
suppquantity number(3),
SuppId number(5),
ItemId  number(5),
CONSTRAINT pk_supplier_item PRIMARY KEY (SuppId, ItemId),
CONSTRAINT fk_supplier_item FOREIGN KEY (SuppId, ItemId)
REFERENCES Supplier(SuppId)
References Item(ItemId)
);

这是我得到的错误。

  

ORA-02256:引用列的数量必须与引用的列匹配

我真的不明白如何修复此错误,任何帮助都将不胜感激。 感谢。

2 个答案:

答案 0 :(得分:3)

您误解了foreign key子句的工作原理。

您需要自己指定每个FK约束。你不能将它们合二为一:

create table Supplier_Item
(
  suppquantity number(3),
  suppid       number(5),
  itemid       number(5),
  CONSTRAINT pk_supplier_item PRIMARY KEY (suppid, itemid),
  FOREIGN KEY (suppid) references supplier (suppid), 
  foreign key (itemid) references item (itemid)
);

或者如果你想给两个FK命名:

create table Supplier_Item
(
  suppquantity number(3),
  suppid       number(5),
  itemid       number(5),
  CONSTRAINT pk_supplier_item PRIMARY KEY (suppid, itemid),
  constraint fk_supp_item2supplier foreign key (suppid) references supplier(suppid), 
  constraint fk_supp_item2item foreign key (itemid) references item (itemid)
);

答案 1 :(得分:1)

这是您遇到错误的部分:

CONSTRAINT fk_supplier_item FOREIGN KEY (SuppId, ItemId)
REFERENCES Supplier(SuppId)
References Item(ItemId)

您需要创建单独的外键,如下所示:

CONSTRAINT fk_supplier_item_supplier FOREIGN KEY (SuppId) REFERENCES Supplier(SuppId),
CONSTRAINT fk_supplier_item_item FOREIGN KEY(ItemId) References Item(ItemId)