我想弄明白我做错了什么。 我有两个相关的表。我按照以下顺序创建它们,我几乎可以肯定它是正确的。问题是我无法创建第一个表“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)
答案 0 :(得分:3)
PRIMARY KEY
没有REFERENCES
部分:
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;这么大惊小怪。线......