在11gR2中使用Oracle DROP TABLE的脚本

时间:2014-12-25 19:17:31

标签: sql oracle drop-table

我对我的查询有点困惑。我收到错误但它确实有效。 我在命令提示符下使用ORACLE 11gR2。 我用主键和外键创建了2个表dp(department)和em(employee)。 如果我多次运行脚本,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) ;

2 个答案:

答案 0 :(得分:1)

使用L在行后再打印行,而不是使用set echo on在脚本顶部使用//

/不是SQL * Plus中的注释标记,恰恰相反:--重新执行您输入的上一个命令(显然在忽略它之后会发生什么)。所以你的脚本会重新执行第一次删除。

使用{{1}}进行评论。

答案 1 :(得分: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) ;

感谢Mat和所有人。