ALTER TABLE - 错误ORA-02270

时间:2015-05-04 10:10:25

标签: oracle

我得到此错误: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);

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

  

APELLIDOPATERNO这是你Fk然后会有一些字段将这个值保存为PK APELLIDOPATERNO

答案 2 :(得分:0)

您将"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"),