在sql developer中创建表时收到错误ORA-00907

时间:2014-09-15 05:06:35

标签: sql oracle

我对sql开发人员很新鲜。我不确定规则。当我按照老师的例子来实践创建一个小型库数据库时,我对每个带有外键的表都有错误。我检查一下这个例子,我确信我没有错过括号。我感到很困惑。请帮忙!

create table Publisher
(Pname VARCHAR(25)  not null ,
 Address varchar(25) not null,
 Phone char(10),
 PRIMARY KEY (Pname));

create table Book
(Book_id int not null,
 Title varchar(20),
 Publisher_name varchar(25) ,
 primary KEY (Book_id),
    foreign key (Publisher_name) references Publisher(Pname)
      ON DELETE CASCADE   ON UPDATE CASCADE);

错误报告显示在“缺少右括号”的第一个级联和第二个之间。但我不这么认为。类似的问题发生在所有其他类似的构造。我的sql开发人员是mac的最新版本。

1 个答案:

答案 0 :(得分:2)

我假设您每次更改Book表中的Pname列时都会尝试确保更新Publisher记录,但Oracle没有on update cascade }。

有关references子句的语法图,请参阅here

要更改Oracle中的主键,您有以下几种选择:

  • Defer the constraint(外键)检查直到提交,然后在事务中更新父和子。

  • 使用更新的详细信息创建 new 父级,然后更改所有子级,然后删除原始父级。当然,所有这些都在交易中。

  • 停止使用可变数据作为密钥。 DBA花了很长时间才说服我应该使用人工(代理)密钥而不是真正的数据,但这是最终赢得我的用例。使用人工密钥(永远不必改变)意味着这个问题完全消失。