SQL 错误代码 ORA-00904::标识符无效 0090400000 - 创建带有约束的表时“%s:标识符无效”

问题描述

创建下表时出现错误代码

ORA-00904: 无效标识符 00904. 00000 - "%s: 无效标识符"

CREATE TABLE Staff (
    staffNo     VARCHAR2(5),fName       VARCHAR2(10),lName       VARCHAR2(10),position    VARCHAR2(10),dob         DATE,salary      NUMBER(7,2)        NOT NULL,branchNo    CHAR(4),supervisor  VARCHAR2(5),CONSTRAINT Staff_PK     PRIMARY KEY (staffNo),CONSTRAINT Staff_AK     UNIQUE      (fName,lName,branchNo),CONSTRAINT Staff_FK     FOREIGN KEY     (branchNo) REFERENCES Branch (branchNo),CONSTRAINT Staff_pos    CHECK       (position IN ('Manager','Supervisor')),CONSTRAINT Staff_fName  CHECK       (NOT (fname IS NULL)),CONSTRAINT Staff_lName  CHECK       (lName IS NOT NULL),CONSTRAINT Staff_branch CHECK       (branchNo IS NOT NULL),CONSTRAINT Staff_position <> 'manager' OR 'supervisor' IS NULL,CONSTRAINT 'A staff member can supervise up to 10 others.',CONSTRAINT 'A staff member who supervises others is in the position of supervisor or 
        manager'
);

我认为这个问题可能与限制有关,但我不确定。这是我第一次编码和使用 Oracle。任何帮助/指导将不胜感激。

解决方法

您是否在尝试创建表 STAFF 之前创建表 BRANCH? 如果是,那么这应该有效。 如果否,则首先从 STAFF 表定义中删除 CONSTRAINT Staff_FK FOREIGN KEY (branchNo) REFERENCES Branch (branchNo) 创建表 BRANCH,将创建 STAFF 表。 您可以在创建 BRANCH TABLE 后使用 ALTER TABLE STAFF 语句添加 CONSTRAINT Staff_FK FOREIGN KEY (branchNo) REFERENCES Branch (branchNo)

“REFERENCES Branch (branchNo)”需要表分支以实现参照完整性,并且最好定义一列 NOT NULL 而不是使用 CHECK 来避免 NULLS。

CREATE TABLE Staff (
    staffNo     VARCHAR2(5),fName       VARCHAR2(10) NOT NULL,lName       VARCHAR2(10) NOT NULL,position    VARCHAR2(10) NOT NULL,DOB         DATE,salary      NUMBER(7,2)        NOT NULL,branchNo    CHAR(4) NOT NULL,supervisor  VARCHAR2(5),CONSTRAINT Staff_PK     PRIMARY KEY (staffNo),CONSTRAINT Staff_AK     UNIQUE      (fName,lName,branchNo),CONSTRAINT Staff_FK     FOREIGN KEY     (branchNo) REFERENCES Branch (branchNo),CONSTRAINT Staff_pos  CHECK( position IN ('Manager','Supervisor')),CONSTRAINT Staff_position CHECK (position <> 'manager' OR supervisor IS NULL)

    /* CONSTRAINT 'A staff member can supervise up to 10 others.',CONSTRAINT 'A staff member who supervises others is in the position of supervisor or manager' -- you need a trigger for these)*/
);

为此,“一名工作人员最多可以监督 10 人。”您不能直接在表定义中创建某些内容。 您可以尝试使用触发器将主管下的员工人数限制为 10 人。