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: 缺少关键字(约束外键)的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00905: 缺少关键字

ORA-00905 缺少关键字

ORA-00905: 缺少关键字 Hibernate 查询

ORA-00905: TOAD 中缺少关键字

case 语句的“ORA-00905:缺少关键字”

错误:ORA-00905:将表连接到选择查询时缺少关键字