0

私はsqlplusを初めて使用し、いくつかのテーブルを作成するSQLスクリプトを実行しようとしましたが、実行しようとすると、テーブルまたはビューが存在しないというエラーが表示され、このエラーを修正する方法がわかりません。 。私のスクリプトは次のとおりです。

 drop table Borrower;
 create table Borrower (
     bid char(100) not null, 
     password char(100) not null, 
     name char(100) null, 
     address char(100) null, 
     phone char(100) null, 
     emailAddress char(100) null, 
     sinOrStNo char(100) null, 
     expiryDate date null, 
     --type ENUM('student','faculty','staff'),
     type char(100) not null,
     --CONSTRAINT Btype_check CHECK (type IN ('student','faculty','staff')),
     FOREIGN KEY (type) references BorrowerType(type),
     PRIMARY KEY (bid));
 grant select on Borrower to public;
4

2 に答える 2

0

別のテーブルを参照する外部キーがある場合、自分のテーブルを削除する前にそのテーブルを削除することはできないため、テーブルを削除または作成する順序は重要です。この例では、BorrowerTypeテーブルの前にBorrowerテーブルを削除する必要があります。

于 2012-11-25T05:59:19.183 に答える
0

「外部キーによって参照されるテーブル内の一意の/主キー」

データベースを適切に実行するには、データの整合性が非常に重要であるため、Oracleは、主キーが別のテーブルの外部キーによって参照されている場合にテーブルを削除できません。だからそれはORA-02449を投げつけます。

したがって、この設定を考えると:

create table t_parent (
    id number not null
    , constraint tp_pk primary key (id)
);
create table t_child (
    id number not null
    , p_id number not null 
    , constraint tc_pk primary key (id)
    , constraint tc_tp_fk foreign key (p_id)
        references t_parent (id)
);

テーブルを削除する方法は3つありますt_parent

  1. 最初に実行drop table t_child:子テーブル、外部キーはありません。
  2. ブロッキング外部キーを削除しますalter table t_child drop constraint tc_pc_fk
  3. 前のものの変形で、データベースに外部キーを見つけさせます drop table t_parent cascade constraints

最初のオプションは、データベースを有効な状態(テーブルなし、データ整合性の破損の可能性なし)のままにするため、最も適切です。3番目のアプローチの有効な使用法は、スキーマからすべてのテーブルをレイズするスクリプトです。データディクショナリからそのようなスクリプトを生成するのは簡単です。

于 2012-11-25T10:36:36.437 に答える