2015-04-17 24 views
0

這些都是我的表:SQL ORA-02256:引用的列數必須與所引用的列

CREATE TABLE EMPLOYEE(
    Emp_id number(4), 
    Emp_name varchar2(30), 
    Emp_gender varchar2(1), 
    Status varchar2(30), 
    Years_service number(4), 
    Primary Key (emp_id) 
); 

CREATE TABLE ACTIVITY(
    Act_id number(4), 
    Description varchar2(30), 
    Category_code varchar2(1), 
    Primary Key(Act_id) 
); 

CREATE TABLE ALLOCATION(
    Emp_id number(4) NOT NULL, 
    Act_id number(4) NOT NULL, 
    Hourly_rate number(5,2) NOT NULL, 
    Primary Key (Act_id, Emp_id), 
    Foreign Key (Act_id) REFERENCES ACTIVITY, 
    Foreign Key (Emp_id) REFERENCES EMPLOYEE, 
    CONSTRAINT CK_ALLOCATION_RATE CHECK(Hourly_rate > 0 and Hourly_rate<300) 
); 

CREATE TABLE ACTION(
    Week_no number(2) NOT NULL, 
    Hrs_worked number(4,1) NOT NULL, 
    Act_id number(4) NOT NULL, 
    emp_id number(4) NOT NULL, 
    Primary Key (Week_no, Act_id, emp_id), 
    Foreign Key (Act_id) References Allocation, 
    Foreign Key (emp_id) References Allocation 
); 

employeeactivityallocation是完全建立。但是當我嘗試創建表action並將外鍵引用到表allocation時,它說:ORA-02256:引用列的數量必須與引用列匹配。

+0

錯誤消息說,這一切。您必須具有與主鍵相同的列數,即2. – jarlh

+0

那麼我應該怎麼做?編輯分配表? – Luke

+0

你必須確定外鍵是什麼。必須在Action中引用Act_id/Emp_id組合,並且仍然有意義! (此外,我會命名錶行動,分配等,因爲商店幾個不同的行。) – jarlh

回答

1

當使用references我認爲這是一個好主意,包括在表,即使語法使得這種不必要的(默認是主鍵)列。

你有一個複合主鍵,所以您需要爲外國參考複合鍵:

CREATE TABLE ACTION (
    Week_no number(2) NOT NULL, 
    Hrs_worked number(4,1) NOT NULL, 
    Act_id number(4) NOT NULL, 
    emp_id number(4) NOT NULL, 
    Primary Key (Week_no, Act_id, emp_id), 
    Foreign Key (Act_id, emp_id) References Allocation(Act_id, emp_id) 
); 
+0

我已經試過這一個。但它返回給我另一個錯誤 – Luke

+1

@Luke - 什麼錯誤?這適用於其他表定義。你有沒有像戈登所表明的那樣,還是你還在試圖定義兩個外鍵? –

相關問題