0

I am new to SQL Oracle.I have the following script:

create table students(
sid char(10),
honors char(10) not null,
primary key (sid),
Constraint studentConst foreign key (honors) references Courses(cid),
);

create table Courses(
cid char(10),
grader char(20) not null,
primary key (cid),
Constraint CoursesConst foreign key (grader) references students(sid),
);

SET CONSTRAINT studentConst,CoursesConst  DEFERRED;

I get the following error on running the above script: SQL Error: ORA-00904: : invalid identifier on line 5. Why do I get this error ?

4

3 回答 3

0

看起来第 5 行试图引用Courses(cid). 但是,此时该Courses表不存在,因为它是在以下 SQL 块中创建的。

先尝试创建依赖表。

于 2013-06-08T22:48:10.893 回答
0

建表添加约束。您可以使用以下alter table语句执行此操作:

create table students(
sid char(10),
honors char(10) not null,
primary key (sid)
);

create table Courses(
cid char(10),
grader char(20) not null,
primary key (cid),
Constraint CoursesConst foreign key (grader) references students(sid)
);

alter table students add constraint studentConst foreign key (honors) references Courses(cid)

SQLFiddle 在这里

于 2013-06-08T22:52:11.740 回答
0

我认为您不能在尚不存在的表上创建外键约束。

由于您有双向约束,因此您需要创建没有约束的第一个表,然后在创建第二个表alter table 添加它。

延迟约束用于检查数据。延期只是意味着在交易结束之前不会进行检查。这并不意味着“推迟创建约束,以便我可以设置循环引用”:-)

于 2013-06-08T22:53:06.220 回答