Oracle - ORA-02270:此列列表错误没有匹配的唯一键或主键
Oracle - ORA-02270 : no matching unique or primary key for this column-list error
我有这两个表:
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)
)
;
在创建 Table TBL2 时,我得到 ORA-02270 : no matching unique or primary key for this column-list 错误
真诚地,我无法解决问题。有人可以帮我吗?谢谢
TT
TBL1
的主键在 DATERIF, DOMAINCODE, DATACODE
- 如果您想从
TBL2
引用 TBL1
,TBL2
的外键约束 必须 匹配那些列(不在名称中, 但在数据类型和顺序中)
- 目前,您仅通过
DATACODE
列引用它(参见那两个 FK
)
如何解决?
- 你不能,因为
TBL2
不包含 DOMAINCODE
列(尽管它确实包含 DATERIF
和 DATACODE
,但这还不够)
- 你可以,如果你
- 将
DOMAINCODE
添加到 TBL2
,或
- 将
TBL1
的主键更改为例如DATERIF, DATACODE
仅
- 将当前主键替换为其他内容(例如序列号)
注意:需要 OP
澄清
您遇到的问题是因为 foreign key
即 referential integrity
、
的限制
正如官方文档所说,here
外键约束
A foreign key constraint (also called a referential integrity constraint) designates a column as the foreign key and establishes a relationship between that foreign key and a specified primary or unique key, called the referenced key. A composite foreign key designates a combination of columns as the foreign key.
假设我们在您的代码中看到的 primary key
具有不同的用途,并且您希望 PRODUCTTYPE
和 CODESECTION
列中的值与 [= 中的值进行检查16=] 为了实现一些完整性,您需要在 DATACODE
列上创建一个 unique
约束,然后 foreign key
引用它,
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),
CONSTRAINT UK_DATACODE_TBL1 UNIQUE(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)
);
我有这两个表:
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)
)
;
在创建 Table TBL2 时,我得到 ORA-02270 : no matching unique or primary key for this column-list 错误 真诚地,我无法解决问题。有人可以帮我吗?谢谢
TT
TBL1
的主键在DATERIF, DOMAINCODE, DATACODE
- 如果您想从
TBL2
引用TBL1
,TBL2
的外键约束 必须 匹配那些列(不在名称中, 但在数据类型和顺序中) - 目前,您仅通过
DATACODE
列引用它(参见那两个FK
)
如何解决?
- 你不能,因为
TBL2
不包含DOMAINCODE
列(尽管它确实包含DATERIF
和DATACODE
,但这还不够) - 你可以,如果你
- 将
DOMAINCODE
添加到TBL2
,或 - 将
TBL1
的主键更改为例如DATERIF, DATACODE
仅 - 将当前主键替换为其他内容(例如序列号)
- 将
注意:需要 OP
澄清您遇到的问题是因为 foreign key
即 referential integrity
、
正如官方文档所说,here
外键约束
A foreign key constraint (also called a referential integrity constraint) designates a column as the foreign key and establishes a relationship between that foreign key and a specified primary or unique key, called the referenced key. A composite foreign key designates a combination of columns as the foreign key.
假设我们在您的代码中看到的 primary key
具有不同的用途,并且您希望 PRODUCTTYPE
和 CODESECTION
列中的值与 [= 中的值进行检查16=] 为了实现一些完整性,您需要在 DATACODE
列上创建一个 unique
约束,然后 foreign key
引用它,
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),
CONSTRAINT UK_DATACODE_TBL1 UNIQUE(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)
);