ORA-00905: 缺少关键字(约束外键)
Posted
技术标签:
【中文标题】ORA-00905: 缺少关键字(约束外键)【英文标题】:ORA-00905: missing keyword (constraint foreign key) 【发布时间】:2014-03-09 04:12:30 【问题描述】:大家好,我是 SQL 的新手,我试图在我的书中回答这个问题:
7.5 为 EMPLOYEE 表编写 CREATE TABLE 语句。 Email 是必填项,是备用键,Department 的默认值为 Human Resources。从 DEPARTMENT 到 EMPLOYEE 的级联更新而不是删除。
我在 Oracle iSQL*Plus 中运行查询,我成功创建了部门表,但是当我在满足这些要求的同时尝试创建员工表时,我在第 12 行得到了缺少关键字的错误
constraint DepartmentFK FOREIGN KEY(DepartmentName),
这是整个查询(我在尝试整个查询之前删除了部门表,它仍然给出相同的错误)
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)
);
CREATE TABLE EMPLOYEE (
ProjectID int NOT NULL,
Name char(30) NOT NULL,
Department char(15) NOT NULL,
MaxHours int NOT NULL,
StartDate char(8) NULL,
EndDate char(8) NULL,
Email char(30) DEFAULT 'Human Resources' NOT NULL,
Constraint EmployeePK PRIMARY KEY(ProjectID),
Constraint EmployeeAK1 UNIQUE(Email),
constraint DepartmentFK FOREIGN KEY(DepartmentName),
references DEPARTMENT(DepartmentName)
ON UPDATE CASCADE
ON DELETE no ACTION
);
我尝试按照书中最相似的示例查找外键约束和引用,但我不明白为什么会出现此错误...
编辑:
我把逗号去掉了,但还是有这两个错误:
CREATE TABLE DEPARTMENT (
*
ERROR at line 1:
ORA-00955: name is already used by an existing object
ON UPDATE CASCADE
*
ERROR at line 14:
ORA-00905: missing keyword
【问题讨论】:
从这里获取参考:***.com/questions/48772/…On UPDATE CASCADE
在 Oracle 中不可用。并且您收到 Department 表的错误,只是因为它已经存在。
非常感谢......你知道我如何在 oracle 中复制它吗?
为了清楚起见,您需要了解ON UPDATE CASCADE
上的概念,然后参考orafaq.com/wiki/Foreign_key#ON_UPDATE_CASCADE 以了解如何在Oracle 中实现此概念。 ON DELETE CASCADE
在 Oracle 中可用。
【参考方案1】:
你必须删除你之后使用的comma
constraint DepartmentFK FOREIGN KEY(DepartmentName),
这是一个单位
constraint DepartmentFK FOREIGN KEY(DepartmentName) references DEPARTMENT(DepartmentName)
编辑: 因为,你已经编辑了你的问题 -
ON UDDATE CASCADE
选项在 Oracle 数据库中不可用,这就是您收到错误消息的原因。
Department
表出现错误,因为该表已经存在,可能来自上次运行!
【讨论】:
你对,我刚刚注意到,我这样做了,但仍然出现这两个错误,更新错误 是的,谢谢。现在,如果我能弄清楚如何在 oracle 中复制 on update 级联..以上是关于ORA-00905: 缺少关键字(约束外键)的主要内容,如果未能解决你的问题,请参考以下文章