sql - SQL 错误代码 ORA-00904: : 无效标识符 00904. 00000 - 创建带约束的表时出现“%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?如果是,那么这应该有效。CONSTRAINT Staff_FK FOREIGN KEY (branchNo) REFERENCES Branch (branchNo)
如果否,则首先从 STAFF 表定义中删除创建表 BRANCH,然后将创建 STAFF 表。您可以在创建 BRANCH TABLE 后添加CONSTRAINT Staff_FK FOREIGN KEY (branchNo) REFERENCES Branch (branchNo)
using ALTER TABLE STAFF 语句。
“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 人。
推荐阅读
- javascript - 从八位字节流转换为 blob 后文件大小减少了很多
- angular - 页脚在内容加载之前加载
- python - 熊猫从字符串加载数据帧
- matlab - 在 Matlab 中将表格列转换为矩阵
- reactjs - 笑话:如何测试调用 bind(this) 的函数
- javascript - React-native 上传图片作为 FormData
- highcharts - 如何在 Highchart 中移动线系列?
- java - ClassCastException:java.lang.String 无法转换为 Object
- scala - 在 Scala 中以 for-comprehension 交换语句显示出奇怪的行为
- javascript - 当firebase函数在另一个文件中时,如何保持它处于打开状态