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

“外键引用的表中的唯一/主键”

数据完整性对于正确运行的数据库至关重要,因此如果表的主键被另一个表的外键引用,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)
);

删除表有三种方法t_parent

  1. 先运行drop table t_child:没有子表,没有外键。
  2. 删除阻塞外键:alter table t_child drop constraint tc_pc_fk.
  3. 前一个的变体,让数据库找出外键: drop table t_parent cascade constraints.

第一个选项是最合适的,因为它使数据库处于有效状态(没有表,没有数据完整性损坏的可能性)。第三种方法的有效用途是从模式中清除所有表的脚本:从数据字典中生成这样的脚本很容易。

于 2012-11-25T10:36:36.437 回答
0

删除或创建表的顺序很重要,因为如果您有引用另一个表的外键,则不能在删除您自己的表之前删除该表。在此示例中,必须在 BorrowerType 表之前删除 Borrower 表。

于 2012-11-25T05:59:19.183 回答