“在删除级联时进行更新级联”的语法错误

时间:2019-06-09 21:39:16

标签: sql oracle syntax message

很抱歉问这样一个愚蠢的问题,但我想做两个表:父母和孩子。父级也有多个其他子级,它们似乎都出现了此错误。谁能告诉我为什么这么说?我正在使用Sql。

我尝试重写整个表,并尝试仅单独使用delete或update级联,但它不起作用。我曾尝试研究其他类似的问题,但没有一个告诉我这样做的原因。

父表;已经创建,没有问题。

create table Person(
SSN int,
FName Varchar(30),
LName Varchar(30) Not Null,
Address Varchar(30) Not Null,
Age int Not Null,
Gender VarChar(20) not Null,
Phone Varchar(200) Not Null,
Primary key(SSN),
Check (Age >0)
);

这个(医生)是子表。当我尝试运行查询时,它说我缺少一个关键字。但是什么词?

create table Doctor(
SSN int not Null,
Doc_id int not Null,
Dept_id int not Null,
HireDate Date not Null,
foreign key(SSN) references Person(SSN)
on update cascade on delete cascade
);

以下是另一子类(以防万一有人希望看到它)

create table Patient(
SSN int,
Pat_id int,
RegDate date not Null,
foreign key(SSN) references Person(SSN)
ON UPDATE CASCADE ON DELETE CASCADE
);

我还尝试在该RegDate语句后删除逗号,但随后它说我缺少正确的括号。

当我删除逗号时:

错误报告- ORA-00907:缺少右括号 00907. 00000-“缺少右括号” *原因:
*动作:


使用逗号:

错误报告- ORA-00905:缺少关键字 00905. 00000-“缺少关键字” *原因:
*动作:

我该怎么办?

1 个答案:

答案 0 :(得分:1)

Oracle不支持update上的级联,仅支持delete上的级联。这样就可以正常工作:

create table Doctor(
    SSN int not Null,
    Doc_id int not Null,
    Dept_id int not Null,
    HireDate Date not Null,
    foreign key(SSN) references Person(SSN) on delete cascade
);

请参见here

这通常不是一个很大的限制,因为无论如何您都不应该更改主键值。

此外,请勿将社会保险号存储为整数。它们实际上是恰好是数字的字符串。至少在美国,它们可以有前导零。