0

私は SQL Oracle を初めて使用します。次のスクリプトがあります。

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;

上記のスクリプトを実行すると、次のエラーが発生します: SQL エラー: ORA-00904: : 行 5 の無効な識別子. なぜこのエラーが発生するのですか?

4

3 に答える 3

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

まだ存在しないテーブルに外部キー制約を作成することはできないと思います。

双方向の制約があるため、最初のテーブルを制約なしで作成し、2 つ目のテーブルが作成されたalter table にそれを追加する必要があります。

遅延制約は、データをチェックするためのものです。延期とは、トランザクションが終了するまでチェックが実行されないことを意味します。「循環参照を設定できるように、制約の作成を延期する」という意味ではありません:-)

于 2013-06-08T22:53:06.220 に答える
0

5 行目は を参照しようとしているようCourses(cid)です。ただし、この時点ではCourses、次の SQL ブロックで作成されるため、テーブルは存在しません。

最初に従属テーブルを作成してみてください。

于 2013-06-08T22:48:10.893 に答える