第5行的错误:ORA-00907:缺少右括号

时间:2018-01-14 08:28:50

标签: sql oracle

我想弄明白我做错了什么。 我有两个相关的表。我按照以下顺序创建它们,我几乎可以肯定它是正确的。问题是我无法创建第一个表“vod_classification”因为我收到错误:

  

第5行的错误:   ORA-00907:缺少右括号

library(forecast)
bsp_ts <- ts(c(1,2,1,2,3,2,3,2,4,3,4,3,4,5,4,3,5,6,5,4,5,6,7,6))
bsp_auto <- auto.arima(bsp_ts, max.p = 12, max.q = 0, seasonal = FALSE, d=0)

2 个答案:

答案 0 :(得分:3)

PRIMARY KEY没有REFERENCES部分:

enter image description here

CREATE TABLE vod_classification (
dbClassId CHAR(4),
dbDescription VARCHAR2(90),
CONSTRAINT vod_classification_PK PRIMARY KEY (dbClassId)
--REFERENCES vod_film (dbClass)
);

<强> DBFiddle Demo

答案 1 :(得分:0)

你做错了什么,但问题是是什么

如果VOD_CLASSIFICATION表中没有REFERENCES子句,那么很容易将其删除。但是,您似乎有意将其作为PRIMARY KEY约束以逗号结尾,因此可能意味着您真正想要从VOD_CLASSIFICATION表创建外键到VOD_FILM。

如果是这样,您应该为这两个表切换位置,因为您无法创建引用尚未创建的表的外键约束。

另一方面,VOD_FILM也引用了VOD_CLASSIFICATION表。这不是一种非常常见的情况,其中两个表在同一列上交换外键约束,即它们都充当 masters details 。 Oracle会允许您这样做,但是 - 您引用的列应该是主键或唯一键(并且VOD_FILM.DBCLASS不是)。此外,应使用ALTER TABLE命令创建外键约束。

以下是一个例子:

SQL> create table vod_classification
  2    (dbclassid     varchar2(4) constraint pk_class primary key,
  3     dbdescription varchar2(90)
  4    );

Table created.

SQL> create table vod_film
  2    (dbfilmid number (4), -- move PRIMARY KEY to DBCLASS constraint pk_film primary key,
  3     dbclass  varchar2(4) constraint pk_film primary key
  4    );

Table created.

SQL> alter table vod_classification add constraint
  2    fk_class_film foreign key (dbclassid)
  3    references vod_film (dbclass);

Table altered.

SQL> alter table vod_film add constraint
  2    fk_film_class foreign key (dbclass)
  3    references vod_classification (dbclassid);

Table altered.

SQL>

在这种情况下,你甚至不能删除表(详细信息接下来),因为它们都是 master 详细信息,因此您必须先删除外键约束,然后再删除表。

这是你真正想要的吗?我不这么认为。

因此,我认为您在VOD_CLASSIFICATION中使用的REFERENCE子句只是一个错误,您应该删除它。

此外,有没有理由使用CHAR数据类型?您更喜欢使用VARCHAR2。

此外,您应该匹配两个表中的数据类型; VOD_CLASSIFICATION.DBCLASSID是CHAR( 4 ),而VOD_FILM.DBCLASS(引用DBCLASSID)是CHAR( 8 )。

我已经尝试修复错误,所以这就是你应该怎么做的。

SQL> CREATE TABLE vod_classification (
  2    dbClassId VARCHAR2(4)      CONSTRAINT pk_class PRIMARY KEY,
  3    dbDescription VARCHAR2(90)
  4  );

Table created.

SQL> CREATE TABLE vod_film (
  2    dbFilmId               NUMBER(4) NOT NULL
  3                               CONSTRAINT pk_film PRIMARY KEY,
  4    dbTitle                VARCHAR2(50) NOT NULL,
  5    dbDirector_firstname   VARCHAR2(10) NOT NULL,
  6    dbDirector_lastname    VARCHAR2(10) NOT NULL,
  7    dbGenre                VARCHAR2(10),
  8    dbUK_release_date      DATE,
  9    dbFilename             VARCHAR2 (15),
 10    dbRuntime              NUMBER (10),
 11    dbClassId              VARCHAR2(4)
 12                               CONSTRAINT fk_film_class
 13                                 REFERENCES vod_classification (dbclassid)
 14                                 ON DELETE SET NULL
 15  );

Table created.

SQL>

关于纯粹的,小的&#34;,REFERENCES vod_film(dbClass)&#34;这么大惊小怪。线......