更改表 - 错误 ORA-02270

Posted

技术标签:

【中文标题】更改表 - 错误 ORA-02270【英文标题】:ALTER TABLE - Error ORA-02270 【发布时间】:2015-05-04 10:10:25 【问题描述】:

当我更改表以添加外键时出现此错误:ORA-02270,知道吗?

CREATE/ALTER TABLE 语句中的 REFERENCES 子句给出了一个列列表,在被引用的表中没有匹配的唯一键或主键约束。

谢谢!

CREATE TABLE "SERMECOOP"."BENEFICIARIO" 
(   "IDBENEFICIARIO" NUMBER(9,0), 
"RUT" CHAR(9 BYTE), 
"APELLIDOPATERNO" VARCHAR2(100 BYTE) NOT NULL ENABLE, 
"APELLIDOMATERNO" VARCHAR2(100 BYTE) NOT NULL ENABLE, 
"NOMBRES" VARCHAR2(100 BYTE) NOT NULL ENABLE, 
"FECHANACIMIENTO" TIMESTAMP (6) NOT NULL ENABLE, 
"SEXO" NUMBER(9,0) NOT NULL ENABLE, 
"DIRECCION" VARCHAR2(256 BYTE) NOT NULL ENABLE, 
"IDCOMUNA" NUMBER(9,0), 
"IDCIUDAD" NUMBER(9,0), 
"IDREGION" NUMBER(9,0), 
"EMAILPERSONAL" VARCHAR2(128 BYTE), 
"INSTITUCIONDESALUD" NUMBER(9,0), 
"EMAILCOMERCIAL" VARCHAR2(128 BYTE), 
"TLFNOCELULAR" VARCHAR2(32 BYTE), 
"TLFNOPARTICULAR" VARCHAR2(32 BYTE), 
"TLFNOCOMERCIAL" VARCHAR2(32 BYTE), 
"BANCO" NUMBER(9,0), 
"CUENTACORRIENTE" VARCHAR2(32 BYTE), 
"TIPOCUENTACORRIENTE" NUMBER(9,0), 
"TIPOBENEFICIARIO" NUMBER(9,0), 
"FECHAINCORPORACION" TIMESTAMP (6), 
"RUTEJECUTIVO" CHAR(9 BYTE), 
"TIPOAFILIADO" NUMBER(9,0), 
"SEGUROCATASTROFICO" NUMBER(1,0) DEFAULT '0', 
"SEGUROVIDA" NUMBER(1,0) DEFAULT '0', 
PRIMARY KEY ("IDBENEFICIARIO"), 
FOREIGN KEY ("SEXO")
REFERENCES "SERMECOOP"."TIPOSEXO" ("IDTIPOSEXO") ENABLE, 
FOREIGN KEY ("IDCOMUNA")
REFERENCES "SERMECOOP"."COMUNAS" ("IDCOMUNA") ENABLE, 
FOREIGN KEY ("INSTITUCIONDESALUD")
REFERENCES "SERMECOOP"."INSTITUCIONESDESALUD" ("IDINSTITUCIONDESALUD") ENABLE, 
FOREIGN KEY ("BANCO")
REFERENCES "SERMECOOP"."BANCOS" ("IDBANCO") ENABLE, 
FOREIGN KEY ("TIPOCUENTACORRIENTE")
REFERENCES "SERMECOOP"."TIPOCUENTACORRIENTE" ("IDTIPOCC") ENABLE, 
FOREIGN KEY ("TIPOBENEFICIARIO")
REFERENCES "SERMECOOP"."TIPOSBENEFICIARIO" ("IDTIPOBENEFICIARIO") ENABLE, 
FOREIGN KEY ("TIPOAFILIADO")
REFERENCES "SERMECOOP"."TIPOAFILIADO" ("IDTIPOAFILIADO") ENABLE, 
FOREIGN KEY ("RUTEJECUTIVO")
REFERENCES "SERMECOOP"."USUARios" ("RUT") ENABLE
);

CREATE TABLE "SERMECOOP"."EMPLEADOS" 
("IDBENEFICIARIO" NUMBER(9,0), 
"EMPRESA" NUMBER(9,0), 
"FECHAINGRESOEMPRESA" TIMESTAMP (6) NOT NULL ENABLE, 
"SUCURSALEMPRESA" NUMBER(9,0), 
"SUCURSALENVIOINFORMACION" NUMBER(9,0), 
"SUELDOPACTADO" NUMBER(19,4), 
"FECHABAJA" TIMESTAMP (6), 
"TIPOCONTRATO" NUMBER(9,0), 
"TIPOJORNADAHORA" VARCHAR2(100 BYTE), 
"SINDICATO" VARCHAR2(100 BYTE), 
PRIMARY KEY ("IDBENEFICIARIO", "EMPRESA")
FOREIGN KEY ("IDBENEFICIARIO")
REFERENCES "SERMECOOP"."BENEFICIARIO" ("IDBENEFICIARIO") ENABLE, 
FOREIGN KEY ("EMPRESA")
REFERENCES "SERMECOOP"."EMPRESA" ("IDEMPRESA") ENABLE, 
FOREIGN KEY ("SUCURSALEMPRESA")
REFERENCES "SERMECOOP"."SUCURSAL" ("IDSUCURSAL") ENABLE, 
FOREIGN KEY ("SUCURSALENVIOINFORMACION")
REFERENCES "SERMECOOP"."SUCURSAL" ("IDSUCURSAL") ENABLE, 
FOREIGN KEY ("TIPOCONTRATO")
REFERENCES "SERMECOOP"."TIPOSCONTRATOS" ("IDTIPOCONTRATO") ENABLE);

ALTER TABLE BENEFICIARIO
ADD FOREIGN KEY (IDBENEFICIARIO)
REFERENCES EMPLEADOS(IDBENEFICIARIO);

【问题讨论】:

你的表名在alter query中是错误的。 检查此链接.. ***.com/questions/10802212/… 【参考方案1】:

您将 "IDBENEFICIARIO""EMPRESA" 声明为组合主键 ....

CREATE TABLE "SERMECOOP"."EMPLEADOS"  
("IDBENEFICIARIO" NUMBER(9,0), 
 ...
 "SINDICATO" VARCHAR2(100 BYTE), 
  PRIMARY KEY ("IDBENEFICIARIO", "EMPRESA")
  FOREIGN KEY ("IDBENEFICIARIO")

...所以你不能有一个只指向IDBENEFICIARIO的外键:

ALTER TABLE BENEFICIARIO
  ADD FOREIGN KEY (IDBENEFICIARIO)
      REFERENCES EMPLEADOS(IDBENEFICIARIO);

另外,你漏掉了后面的逗号……

PRIMARY KEY ("IDBENEFICIARIO", "EMPRESA"),

【讨论】:

【参考方案2】:

请检查您引用的所有字段是否都有 PK 字段

ORA-02270: no matching unique or primary key for this column-list

【讨论】:

【参考方案3】:

您已将外键指定给无法引用指定主键的特定列。因此,您只需查看要为哪个列字段分配 FK 并检查另一个表是否包含此类主键。 喜欢

APELLIDOPATERNO 这是你的 Fk,那么会有一些字段将此值保存为 PK APELLIDOPATERNO

【讨论】:

以上是关于更改表 - 错误 ORA-02270的主要内容,如果未能解决你的问题,请参考以下文章

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

如何修复 sql 中的“ORA-02270:此列列表没有匹配的唯一键或主键”错误

添加外键约束时遇到问题(错误 ORA-02270:此列列表没有匹配的唯一键或主键)

ORA-02270: 此列列表的唯一关键字或主键不匹配一些思路

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

Oracle (ORA-02270):该列列表没有匹配的唯一键或主键