0

クエリについて少し混乱しています。エラーが発生していますが、動作します。コマンド プロンプトで ORACLE 11gR2 を使用しています。主キーと外部キーを持つ 2 つのテーブル dp (部門) と em (従業員) を作成しました。スクリプトを数回実行すると、DROP TABLE 関数はテーブルを 2 回削除しようとしますが、試行するのは 1 回だけです。なぜそれが起こっているのか、何か考えを教えてください。私のスクリプトを以下に示します。

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 のコメント マーカーではなく、まったく逆です。/前に入力したコマンドを再実行します (そして、その後に続くコマンドは明らかに無視されます)。したがって、スクリプトは最初のドロップを再実行します。

--コメントに使用します。

于 2014-12-25T19:32:08.303 に答える
0

それはばかげた間違いであり、私の誤解でした。ORACLE は DROP を 2 回試行しませんでした。ドロップは 1 回だけでした (当然のことです) が、スクリプトで 'L' を 2 回書いたので、試行が 2 回表示されていました。とにかく、更新されたコードを以下に示します。

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 に答える