我对我的查询有点困惑。我收到错误但它确实有效。 我在命令提示符下使用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) ;
答案 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和所有人。