有人可以帮我解决SQL错误:ORA-02270?

时间:2015-01-02 13:04:11

标签: sql database oracle ddl

有人可以帮我解决这个错误。也许你的眼睛更清晰。我查了很多代码,但仍然无法找到它。我想要做的是为KODAS_UŽ表创建UŽSAKYTOS_DALYS外键。

CREATE TABLE UŽSAKYMAI
    (KODAS_UŽ NUMERIC(10,0) NOT NULL,
     ID_USS NUMERIC(10,0) NOT NULL,
     DATA_UŽ DATE NOT NULL);
ALTER TABLE UŽSAKYMAI ADD CONSTRAINT UŽSAKYMAI_PK PRIMARY KEY (KODAS_UŽ,ID_USS);

CREATE TABLE UŽSAKYTOS_DALYS 
    (NR NUMERIC(3,0) NOT NULL,
     KODAS_DLS VARCHAR(20) NOT NULL,
     KODAS_UKS NUMERIC(10,0) NOT NULL,
     ID_USS NUMERIC(10,0) NOT NULL);
ALTER TABLE UŽSAKYTOS_DALYS ADD CONSTRAINT UŽ_PK PRIMARY KEY (NR, KODAS_DLS, KODAS_UKS);

ALTER TABLE UŽSAKYTOS_DALYS ADD CONSTRAINT UŽSAKYTOS_DALYS_DALYS_FK FOREIGN KEY (KODAS_DLS)
REFERENCES DALYS(KODAS_D) ON DELETE CASCADE;

它不能在这里工作

ALTER TABLE UŽSAKYTOS_DALYS ADD CONSTRAINT UŽSAKYTOS_DALYS_UŽSAKYMAI_FK FOREIGN KEY (KODAS_UKS)
REFERENCES UŽSAKYMAI(KODAS_UŽ) ON DELETE CASCADE;

错误代码:

SQL Error: ORA-02270: no matching unique or primary key for this column-list 02270. 00000 - "no matching unique or primary key for this column-list" 
*Cause: A REFERENCES clause in a CREATE/ALTER TABLE statement gives a column-list for which there is no matching unique or primary key constraint in the referenced table.
*Action: Find the correct column names using the ALL_CONS_COLUMNS catalog view 

2 个答案:

答案 0 :(得分:4)

尝试:

ALTER TABLE UŽSAKYTOS_DALYS ADD CONSTRAINT UŽSAKYTOS_DALYS_UŽSAKYMAI_FK FOREIGN KEY (KODAS_UKS, ID_USS)
    REFERENCES UŽSAKYMAI(KODAS_UŽ, ID_USS) ON DELETE CASCADE;

这是我最好的猜测,我不太熟悉Oracle或一般的外键。我只偶尔制作它们(读:基本上从不)。

答案 1 :(得分:3)

您的问题是,引用表的主键有两个列,但您正在尝试创建一个包含一个列的外键。< / p>

这是表格def:

CREATE TABLE UŽSAKYMAI
    (KODAS_UŽ NUMERIC(10,0) NOT NULL,
     ID_USS NUMERIC(10,0) NOT NULL,
     DATA_UŽ DATE NOT NULL);
ALTER TABLE UŽSAKYMAI ADD CONSTRAINT UŽSAKYMAI_PK
  PRIMARY KEY (KODAS_UŽ,ID_USS);

以下是您尝试引用它的方法:

ALTER TABLE UŽSAKYTOS_DALYS ADD CONSTRAINT UŽSAKYTOS_DALYS_UŽSAKYMAI_FK
  FOREIGN KEY (KODAS_UKS) REFERENCES UŽSAKYMAI(KODAS_UŽ)
  ON DELETE CASCADE;

尝试将ID_USS列添加到您的外键def:

ALTER TABLE UŽSAKYTOS_DALYS ADD CONSTRAINT UŽSAKYTOS_DALYS_UŽSAKYMAI_FK
  FOREIGN KEY (KODAS_UKS, ID_USS) REFERENCES UŽSAKYMAI(KODAS_UŽ, ID_USS)
  ON DELETE CASCADE;

或者简单地说,因为您正在引用主键,所以可以省略引用的列:

ALTER TABLE UŽSAKYTOS_DALYS ADD CONSTRAINT UŽSAKYTOS_DALYS_UŽSAKYMAI_FK
  FOREIGN KEY (KODAS_UKS, ID_USS) REFERENCES UŽSAKYMAI
  ON DELETE CASCADE;