Sql ORA-00904:标识符无效,ORA-02256:引用列数必须与引用列数匹配(oracle)

Sql ORA-00904:标识符无效,ORA-02256:引用列数必须与引用列数匹配(oracle),sql,oracle,Sql,Oracle,嗨,伙计们,很抱歉我对sql和数据库非常陌生,我正在尝试创建这3个表,但由于这两种类型的错误,我无法理解如何修复它们,我想我在理解和巩固从其他表创建外键和主键的语法时遇到了困难,以下是erorrs,后面是create table语句: Table created. 1 row created. Constraint DepartmentFK FOREIGN KEY(DepartmentName) * ERROR at l

嗨,伙计们,很抱歉我对sql和数据库非常陌生,我正在尝试创建这3个表,但由于这两种类型的错误,我无法理解如何修复它们,我想我在理解和巩固从其他表创建外键和主键的语法时遇到了困难,以下是erorrs,后面是create table语句:

Table created.

1 row created.

Constraint DepartmentFK FOREIGN KEY(DepartmentName)
                                    *
ERROR at line 12: 
ORA-00904: "DEPARTMENTNAME": invalid identifier 
Constraint EmployeePK   PRIMARY KEY(EmployeeNumber),
                                    *
ERROR at line 9: 
ORA-00904: "EMPLOYEENUMBER": invalid identifier 
)
*
ERROR at line 11: 
ORA-02256: number of referencing columns must match referenced columns 
如果有帮助的话,我会尽力回答这些问题:

7.5 Write a CREATE TABLE statement for the EMPLOYEE table. Email is required and is 
an alternate key, and the default value of Department is Human Resources. Cascade
updates but not deletions from DEPARTMENT to EMPLOYEE.

7.6 Write a CREATE TABLE statement for PROJECT table. The default value for MaxHours is 100.
 Cascade updates but not deletions from DEPARTMENT to EMPLOYEE. 

7.7 Write a CREATE TABLE statement for the ASSIGNMENT table. Cascade only deletions from
PROJECT to ASSIGNMENT; do not cascade either deletions or updates from EMPLOYEE to 
ASSIGNMENT.

7.8 Modify your answer to Review Question 7.7 to include the constraint that StartDate
 be prior to EndDate.
这是我的密码:

CREATE TABLE DEPARTMENT (
DepartmentName  char(35) NOT NULL,
BudgetCode      char(30) NOT NULL,
OfficeNumber    char(15) NOT NULL,
Phone           char(12) NOT NULL,

Constraint DepartmentPK PRIMARY KEY(DepartmentName)

);

INSERT INTO DEPARTMENT VALUES (
    'Administration', 'BC-100-10', 'BLDG01-300', '360-285-8100');

CREATE TABLE EMPLOYEE (
EmployeeNumber  int         NOT NULL,
FirstName       char(25)    NOT NULL,
LastName        char(25)    NOT NULL,
Department      char(35)    DEFAULT 'Human Resources' NOT NULL,
Phone           char(12)    NULL,
Email           char(30)    NOT NULL,


Constraint EmployeePK   PRIMARY KEY(EmployeeNumber),
Constraint EmployeeAK1 UNIQUE(Email),
Constraint DepartmentFK FOREIGN KEY(DepartmentName)
    references DEPARTMENT(DepartmentName)
--ON UPDATE CASCADE 
-- ON DELETE no ACTION 

);

CREATE TABLE PROJECT (
ProjectID   int         NOT NULL,
Name        char(30)    NOT NULL,
Department1 char(15)    NOT NULL,
MaxHours    int         DEFAULT 100 NOT NULL,
StartDate   DATE        NULL,
EndDate     DATE        NULL,

Constraint EmployeePK   PRIMARY KEY(EmployeeNumber),
constraint DepartmentFK FOREIGN KEY(DepartmentName)
    references DEPARTMENT(DepartmentName)
-- ON UPDATE CASCADE 
-- ON DELETE no ACTION 
);

CREATE TABLE Assignment(
ProjectID       Number       NOT NULL,
EmployeeNumber  Number      NOT NULL,
HoursWorked     Number      NULL,

Constraint  datecheck check (Assignment.StartDate < Assignment.EndDate),
Constraint ProjectIDEmpNumPK    PRIMARY KEY(ProjectID, EmployeeNumber),
constraint ProjectIDEmpNumFK FOREIGN KEY(ProjectID, DepartmentName)
    references EMPLOYEE(DepartmentName)
--ON DELETE CASCADE 
);
我试图查找这些错误,但我只是按照我的书中的示例进行操作,我感到困惑:

我终于让桌子开始工作了。理解如何进行正确的外键声明很重要,每个外键声明在每个子表中都必须是唯一的

CREATE TABLE DEPARTMENT (
DepartmentName  char(35) NOT NULL,
BudgetCode      char(30) NOT NULL,
OfficeNumber    char(15) NOT NULL,
Phone           char(12) NOT NULL,

Constraint DepartmentPK PRIMARY KEY(DepartmentName)

);

INSERT INTO DEPARTMENT VALUES (
    'Administration', 'BC-100-10', 'BLDG01-300', '360-285-8100');

CREATE TABLE EMPLOYEE (
EmployeeNumber  int         NOT NULL,
FirstName       char(25)    NOT NULL,
LastName        char(25)    NOT NULL,
Department      char(35)    DEFAULT 'Human Resources' NOT NULL,
Phone           char(12)    NULL,
Email           char(30)    NOT NULL,
DepartmentName_FK char(35) NOT NULL,

Constraint EmployeePK   PRIMARY KEY(EmployeeNumber),
Constraint EmployeeAK1 UNIQUE(Email),
Constraint DepartmentFK FOREIGN KEY (DepartmentName_FK)
    references DEPARTMENT(DepartmentName)
--ON UPDATE CASCADE 
--ON DELETE no ACTION 

);

CREATE TABLE PROJECT (
ProjectID   int         NOT NULL,
Name        char(30)    NOT NULL,
Department1 char(15)    NOT NULL,
MaxHours    int         DEFAULT 100 NOT NULL,
StartDate   DATE        NULL,
EndDate     DATE        NULL,
DepartmentName_FK1 char(30)   NULL,


Constraint  datecheck check (StartDate < EndDate),
Constraint ProjectIDPK   PRIMARY KEY(ProjectID),
Constraint DepartmentFK1 FOREIGN KEY (DepartmentName_FK1)
    references DEPARTMENT(DepartmentName)
-- ON UPDATE CASCADE 
-- ON DELETE no ACTION 
);

CREATE TABLE Assignment(
ProjectID       Number      NOT NULL,
EmployeeNumber  Number      NOT NULL,
HoursWorked     Number      NULL,
DepartmentName_FK2 char(30)   NULL,

Constraint ProjectIDEmpNumPK PRIMARY KEY(ProjectID, EmployeeNumber),
constraint ProjectIDEmpNumFK FOREIGN KEY(DepartmentName_FK2)
    references Department(DepartmentName)
--ON DELETE CASCADE 
);

如果有人注意到这些表格声明中与我发布的问题有关的任何错误,您可以让我知道吗?另外,我只需要弄清楚如何按语法编写级联更新和删除…

您忘记在EMPLOYEE表中为该FK创建列了 您的桌子应如下所示:

现在就试试吧


看看我写的这篇文章,它会帮助你更好地理解

事实上,你的台词中有太多的问题。例如,在employee表中,外键位于DepartmentName列上,而在employee表中,外键不在Department列上

这是:

  Constraint  datecheck check (Assignment.StartDate < Assignment.EndDate),
在作业表中,我想你们的意思是把它放在项目表中,因为在作业中并没有开始和结束日期


我创建了一个工作列表供您检查。

该列表删除了一个!:我将尝试在另一个上这样做,我想每次我做外键约束时,我都必须首先在顶部声明它?我的意思是你们需要有一个代表彼此的列!!在两张桌子上!!我仍然收到错误:Constraint EmployeePK PRIMARY KEYEmployeeNumber,*第9行错误:ORA-00904:EMPLOYEENUMBER:无效标识符如何使表项目具有对EMPLOYEENUMBER的访问权限?我不理解您的问题?您的项目表不能有由其FK表示的主键!你必须重新考虑这个问题!有趣的是,当我阅读7.8的时候,我也在想同样的事情。我添加了一个问题,它要求我修改作业表,使之具有日期检查约束。。。为什么会这样?谁问你的?我不明白。。。如果要将该约束添加到分配表中,则必须将列添加到该表中。约束作用于父表和正在创建的表上的现有列。假设您正在表Y的Z列上创建一个外键,以引用表X中的a列。表Y应该有一个名为Z的列,表X应该有一个名为a的列,该列是主键。等等,我想问题是我编写了assignment.startdate而不是project.startdate,在赋值表的内部constraint@Mr.AwesomeSauce是的,我已经看过了,但这在作业表上并不意味着什么。为什么要在分配表中测试分配开始日期/结束日期。将项目添加到项目表时需要此约束True。。当我最后一次运行它时,它不是那样工作的。。我只是想知道为什么在问题中它要求我这样做?7.7为分配表编写CREATETABLE语句。仅从项目到任务的级联删除;不要将员工的删除或更新级联到工作分配。7.8修改您对问题7.7的回答,以包括StartDate在EndDate之前的约束?
  Constraint  datecheck check (Assignment.StartDate < Assignment.EndDate),