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

  • 本文关键字:引用 Oracle 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:引用列数必须与引用列匹配

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

你误解了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)
);

这是您遇到错误的部分:

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)

最新更新