0

テーブルを削除してテーブルを作成する一連のスクリプトを実行しようとしています。コンパイルはしますが、実行すると次のエラーが発生します: ORA-00942 テーブルまたはビューが存在しません。それらは存在するべきではありません。私はそれらを作成しようとしています! なぜこれが起こっているのか誰にも分かりますか?コマンドラインではなく、Oracle インターフェイスを使用しています。Notepad++ でコードを作成し、Oracle にアップロードしました。次に、Oracle 内でスクリプトを保存して実行します。[結果を表示] をクリックすると、エラーが表示されます。

編集:外部キーが作成されていないのはテーブルだけであることに気付きました!

これは私のコードからの抜粋です:

CREATE TABLE PricePlans (
plan_id NUMBER(3) NOT NULL,
plan_name VARCHAR2(15) NOT NULL,
plan_desc VARCHAR2(30) NOT NULL,
plan_duration_months NUMBER(2) NOT NULL,
plan_cost NUMBER(4) NOT NULL,
CONSTRAINT pk_planid PRIMARY KEY (plan_id)
);

DROP TABLE Classes;
CREATE TABLE Classes (
class_id NUMBER(3) NOT NULL,
class_name VARCHAR2(30) NOT NULL,
class_desc VARCHAR2(30) NOT NULL,
class_facility NUMBER(2) NOT NULL,
class_instructor NUMBER(5) NOT NULL,
class_cost NUMBER(2) NOT NULL,
CONSTRAINT pk_classid PRIMARY KEY (class_id),
CONSTRAINT fk_classfacility 
    FOREIGN KEY (class_facility) 
    REFERENCES Facilities(facility_id),
CONSTRAINT fk_classinstructor 
    FOREIGN KEY (class_instructor) 
    REFERENCES Employees(emp_id)
);

DROP TABLE Facilities;
CREATE TABLE Facilities (
facility_id NUMBER(2) NOT NULL,
facility_name VARCHAR(15) NOT NULL,
facility_manager NUMBER(4) NOT NULL,
CONSTRAINT pk_facilityid PRIMARY KEY (facility_id);
CONSTRAINT fk_facilitymanager 
    FOREIGN KEY (facility_manager) 
    REFERENCES Manager(manager_id)
);
4

1 に答える 1

2

クエリDROP TABLEのステートメントが、存在しないテーブルを削除しようとしていると思います。

スクリプトから次の行を削除します。

DROP TABLE Classes;

DROP TABLE Facilities;

DROP TABLEステートメントを実行する前に、テーブルが存在するかどうかを確認できます。これに役立つ可能性のあるSOの回答はほとんどありません。

Oracle: テーブルが存在する場合

データベースにテーブルが存在するかどうかを確認する - PL SQL

アップデート

ClassesCREATE TABLEステートメントでは、外部キーf​​k_classfacility が、後で作成されるテーブルFacilitiesを参照しています。CREATE TABLEステートメントを切り替えてみてください。最初にテーブルを作成し、次にテーブルを作成します。FacilitiesClasses

制約で参照されている他のすべてのテーブルが既に存在していると仮定します。

于 2012-05-01T22:50:31.770 に答える