微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Oracle-ORA-02270:此列列表错误没有匹配的唯一键或主键

如何解决Oracle-ORA-02270:此列列表错误没有匹配的唯一键或主键

我有两个表:

CREATE TABLE TBL1 (
  DATERIF DATE NOT NULL,DOMAINCODE VARCHAR2(20) NOT NULL,DATACODE VARCHAR2(10) NOT NULL,DSDATO VARCHAR2(50),CDDWH CHAR(1),CONSTRAINT PK_TBL1 PRIMARY KEY (DATERIF,DOMAINCODE,DATACODE)
)
;

CREATE TABLE TBL2 (
  DATERIF DATE NOT NULL,PRODUCTCODE CHAR(5 BYTE) NOT NULL,PRODCATEG VARCHAR2(20) NOT NULL,PRODUCTDESCR VARCHAR2(100),PRODUCTTYPE VARCHAR2(10),CODSECTION  VARCHAR2(10),CDDWH CHAR(1 BYTE),DTUPDATED DATE,CONSTRAINT PK_TBL2 PRIMARY KEY (DATERIF,PRODUCTCODE,PRODCATEG),CONSTRAINT FK_TBL2_TBL1_PRODUCTTYPE FOREIGN KEY (PRODUCTTYPE) REFERENCES TBL1(DATACODE),CONSTRAINT FK_TBL2_TBL1_CODSECTION FOREIGN KEY (CODSECTION) REFERENCES TBL1(DATACODE)
)
;

在创建表TBL2时,我得到ORA-02270:此列列表错误没有匹配的唯一键或主键 真诚的,我无法解决问题。有人可以帮我吗?谢谢

TT

解决方法

  • TBL1的主键位于DATERIF,DOMAINCODE,DATACODE
  • 如果您要引用TBL1中的TBL2,则TBL2的外键约束必须与这些列匹配(不是名称,而是数据类型和订单)
  • 当前,您仅通过DATACODE列引用它(请参阅这两个FK

如何解决?

  • 您不能这样做,因为TBL2不包含DOMAINCODE列(尽管它确实包含DATERIFDATACODE,但这还不够)
  • 如果可以的话,你可以
    • DOMAINCODE添加到了TBL2,或者
    • TBL1的主键更改为例如仅DATERIF,DATACODE
    • 将当前主键替换为其他东西(例如序列号)
,

注意:需要从OP中进行澄清

您面临的问题是由于foreign keyreferential integrity的限制,

如官方文档所述,here

外键约束

外键约束(也称为参照完整性约束)将一列指定为外键,并在该外键与指定的主键或唯一键(称为参考键)之间建立关系。组合外键将列的组合指定为外键。

假设我们在您的代码中看到的primary key具有不同的用途,并且您想在PRODUCTTYPECODESECTION列中有值要与{{1}中的值进行比较}为了实现某些完整性,您需要在DATACODE列上创建一个unique约束,然后对它进行DATACODE引用,

foreign key

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。