2015-04-17 26 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 - 什么错误?这适用于其他表定义。你有没有像戈登所表明的那样,还是你还在试图定义两个外键? –

相关问题