0

我对我的查询有点困惑。我收到错误,但它有效。我在命令提示符下使用 ORACLE 11gR2。我用主键和外键创建了 2 个表 dp(部门)和 em(员工)。如果我运行脚本几次,DROP TABLE 函数会尝试删除表 2 次,但它应该只尝试一次。您能否告诉我为什么会发生这种情况。我的脚本如下。

cl scr

DROP TABLE dp CASCADE CONSTRAINT ;
L
// DROP TABLE dp PURGE ;
L
CREATE TABLE dp (
    dpid    NUMBER(2),
    dname   VARCHAR2(20));

DROP TABLE em PURGE ;
CREATE TABLE em (
    emid    NUMBER(2),
    ename   VARCHAR2(20),
    dpid    NUMBER(2));

ALTER TABLE dp
ADD CONSTRAINT pk_dp_dpid PRIMARY KEY (dpid) ;

ALTER TABLE em
ADD CONSTRAINT fk_em_dp_dpid FOREIGN KEY (dpid)
REFERENCES dp (dpid) ;
4

2 回答 2

1

L与其在运行后使用打印行,不如set echo on在脚本顶部使用。

//不是 SQL*Plus 中的注释标记,恰恰相反:/重新执行您输入的前一个命令(显然它之后的命令被忽略了)。所以你的脚本会重新执行第一个 drop。

用于--评论。

于 2014-12-25T19:32:08.303 回答
0

这是一个愚蠢的错误和我的误解。ORACLE 没有尝试 DROP 两次。它只掉了一次(应该是),但在脚本中我写了两次“L”,所以它显示了两次尝试。无论如何,下面给出了更新的代码。

cl scr

DROP TABLE dp CASCADE CONSTRAINT ;
L
CREATE TABLE dp (
    dpid    NUMBER(2),
    dname   VARCHAR2(20));

DROP TABLE em PURGE ;
CREATE TABLE em (
    emid    NUMBER(2),
    ename   VARCHAR2(20),
    dpid    NUMBER(2));

ALTER TABLE dp
ADD CONSTRAINT pk_dp_dpid PRIMARY KEY (dpid) ;

ALTER TABLE em
ADD CONSTRAINT fk_em_dp_dpid FOREIGN KEY (dpid)
REFERENCES dp (dpid) ;

感谢马特和所有人。

于 2014-12-25T19:45:11.540 回答