如何解决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
列(尽管它确实包含DATERIF
和DATACODE
,但这还不够) - 如果可以的话,你可以
- 将
DOMAINCODE
添加到了TBL2
,或者 - 将
TBL1
的主键更改为例如仅DATERIF,DATACODE
- 将当前主键替换为其他东西(例如序列号)
- 将
注意:需要从OP中进行澄清
您面临的问题是由于foreign key
或referential integrity
的限制,
如官方文档所述,here
外键约束
外键约束(也称为参照完整性约束)将一列指定为外键,并在该外键与指定的主键或唯一键(称为参考键)之间建立关系。组合外键将列的组合指定为外键。
假设我们在您的代码中看到的primary key
具有不同的用途,并且您想在PRODUCTTYPE
和CODESECTION
列中有值要与{{1}中的值进行比较}为了实现某些完整性,您需要在DATACODE
列上创建一个unique
约束,然后对它进行DATACODE
引用,
foreign key
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。