ORA-00907:缺少右括号,所有括号都已关闭但仍不工作

  • 本文关键字:工作 ORA-00907 sql oracle ora-00907
  • 更新时间 :
  • 英文 :


我想创建两个表PublisherBook。下面是创建表的SQL语句。

我想在Book表中创建一个外键约束。我不确定为什么会抛出这个错误。我反复核对了所有的括号。语法似乎很好,但它没有创建表。

CREATE TABLE Publisher
(
    pub_name varchar2(128) PRIMARY KEY, 
    phone integer, 
    address varchar2(20)
);

CREATE TABLE Book
(
    book_id integer NOT NULL PRIMARY KEY,
    title varchar2(256),
    pub_year number(4) UNSIGNED,
    pub_name REFERENCES Publisher(pub_name) ON DELETE CASCADE ON UPDATE CASCADE
);

在Oracle中,没有UNSIGNEDON UPDATE CASCADE

SQL> CREATE TABLE Publisher(
  2  pub_name varchar2(128) PRIMARY KEY,
  3  phone    integer,
  4  address  varchar2(20));
Table created.
SQL> CREATE TABLE Book(
  2  book_id  integer NOT NULL PRIMARY KEY,
  3  title    varchar2(256),
  4  pub_year number(4),
  5  pub_name REFERENCES Publisher(pub_name) ON DELETE CASCADE);
Table created.
SQL>

一个错误是on update cascade。但是,这是第二个错误:

pub_year number(4) UNSIGNED,

因为这里不允许使用unsigned,所以您可以使用约束:

pub_year number(4) check (pub_year > 0),
也就是说,您可能需要更具体的约束,例如:
pub_year number(4) check (pub_year > 1950 and pub_year < 2100),

注意,这将把年份表示为一个整数(在数字定义上有scale,所以默认值是0)。如果您尝试插入像2020.20这样的数字,那么该值将被截断,而不是生成错误。

相关内容

  • 没有找到相关文章

最新更新