ORA-00907:缺少右括号,但我看不到它?



这是我的作业代码

CREATE TABLE workorders
(
wo# NUMBER(5) PRIMARY KEY,
proj# VARCHAR(10) NOT NULL FOREIGN KEY REFERENCES project(proj#),
wo_desc VARCHAR(30) NOT NULL UNIQUE,
wo_assigned VARCHAR(30),
wo_hours NUMBER(5) NOT NULL CHECK(wo_hours>0),
wo_start DATE,
wo_due DATE,
wo_complete CHAR(1),
CONSTRAINT workorders_wo_complete_chk CHECK(wo_complete in('Y','N'))
);

我不明白为什么oracle apex不让我创建这个表,它说

ORA-00907:右括号缺失

但是我反复检查了很多次,我想我确实有所有的括号?我在这里做错了什么?

Thanks in advance

我只是想在这些约束下创建这个表,但是我可以找到我所知道的任何错误。

Oracle的错误消息通常不是特别有用,最好的方法是逐行检查代码,注释掉每一行,直到您隔离问题。

在这种情况下,违规行是

proj# VARCHAR(10) NOT NULL FOREIGN KEY REFERENCES project(proj#),

,问题是您不使用单词FOREIGN KEY来定义外键—您只需要指定它引用的内容。所以这应该是

proj# VARCHAR(10) NOT NULL REFERENCES project(proj#),

然后你就没事了。

db<此处小提琴>

在定义内联约束时,不使用FOREIGN KEY术语:

proj# VARCHAR2(10) NOT NULL
                   REFERENCES project(proj#)

注意:Oracle使用VARCHAR2VARCHARVARCHAR2的别名,最好始终使用VARCHAR2

但是,当您定义行外键时需要这些关键字(但是这样您就会丢失逗号和列标识符):

proj# NOT NULL,
FOREIGN KEY (proj#) REFERENCES project (proj#)

注意:如果使用外键约束,则不需要定义数据类型,Oracle将隐式使用所引用的列的数据类型


使用(命名)内联约束的完整代码如下:

CREATE TABLE workorders
(
  wo#         NUMBER(5)
              CONSTRAINT workorders__wo#__pk PRIMARY KEY,
  proj#       -- Note: do not need the data type as the FK will define it.
              NOT NULL
              CONSTRAINT workorders__proj#__fk REFERENCES project(proj#),
  wo_desc     VARCHAR2(30)
              NOT NULL
              CONSTRAINT workorders__wo_desc__u UNIQUE,
  wo_assigned VARCHAR2(30),
  wo_hours    NUMBER(5)
              NOT NULL
              CONSTRAINT workorders__wo_hours__chk CHECK(wo_hours>0),
  wo_start    DATE,
  wo_due      DATE,
  wo_complete CHAR(1)
              CONSTRAINT workorders_wo_complete_chk CHECK(wo_complete in('Y','N'))
);

和使用(命名的)行外约束:

CREATE TABLE workorders
(
  wo#         NUMBER(5),
  proj#       -- Note: do not need the data type as the FK will define it.
              NOT NULL,
  wo_desc     VARCHAR2(30)
              NOT NULL,
  wo_assigned VARCHAR2(30),
  wo_hours    NUMBER(5)
              NOT NULL,
  wo_start    DATE,
  wo_due      DATE,
  wo_complete CHAR(1),
  CONSTRAINT workorders__wo#__pk PRIMARY KEY(wo#),
  CONSTRAINT workorders__proj#__fk FOREIGN KEY (proj#) REFERENCES project(proj#),
  CONSTRAINT workorders__wo_desc__u UNIQUE(wo_desc),
  CONSTRAINT workorders_wo_complete_chk CHECK(wo_complete in('Y','N')),
  CONSTRAINT workorders__wo_hours__chk CHECK(wo_hours>0)
);

小提琴

相关内容

最新更新