11gR2 中带有 Oracle DROP TABLE 的脚本

Posted

技术标签:

【中文标题】11gR2 中带有 Oracle DROP TABLE 的脚本【英文标题】:Script with Oracle DROP TABLE in 11gR2 【发布时间】:2014-12-25 19:17:30 【问题描述】:

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

【问题讨论】:

嗨垫,我已经使用脚本在命令提示符下运行这些命令。在命令提示符下,如果我运行脚本它只显示结果。所以我使用了“L”来显示它在这里阅读的内容。 (L 显示它刚刚执行的行。) 【参考方案1】:

不要在运行后使用L 来打印行,而是在脚本顶部使用set echo on

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

对 cme​​ts 使用 --

【讨论】:

感谢您的回复。我尝试了这种(--)方式。但它仍然试图下降两次。有什么办法可以发给你截图吗? 用你更新的脚本和你得到的确切输出更新你的问题。 嗨垫,非常感谢您的帮助。现在好了。 发生这种情况是因为我写了两次“L”。【参考方案2】:

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

cl 脚本

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 和所有人。

【讨论】:

以上是关于11gR2 中带有 Oracle DROP TABLE 的脚本的主要内容,如果未能解决你的问题,请参考以下文章

oracle11gR2 手工创建基于asm存储的oracle实例

CentOS7 静默安装Oracle 11gR2(11.2.0.1)

Oracle 11gR2 RAC中的SCAN IP

Oracle 11gR2用gpnp profile存放ASM的spfile路径

Oracle11gR2--SEC_CASE_SENSITIVE_LOGON参数解析

centos7下安装oracle11gR2