2014-12-25 3 views
0

약간의 질문에 대해 혼란스러워합니다. 오류가 발생하지만 작동합니다. 명령 프롬프트에서 ORACLE 11gR2를 사용하고 있습니다. 기본 키와 외래 키가있는 2 개의 테이블 dp (department)와 em (employee)을 만들었습니다. 스크립트를 두 번 실행하면 DROP TABLE 함수가 테이블을 두 번 삭제하려고 시도하지만 한 번만 시도해야합니다. 왜 그런 일이 일어 났는지 알려주시겠습니까? 내 대본은 아래와 같습니다.11gR2의 Oracle DROP TABLE이있는 스크립트

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

안녕하세요, 저는 스크립트를 사용하여 명령 프롬프트에서 해당 명령을 실행했습니다. 명령 프롬프트에서 스크립트를 실행하면 결과 만 표시됩니다. 그래서 'L'을 사용하여 여기에서 읽고있는 내용을 보여줍니다. (L은 방금 실행 한 행을 표시합니다.) – Murshed

답변

1

오히려 그들이 실행하고 후 라인을 인쇄 할 수 L를 사용하는 것보다, 스크립트의 상단에 set echo on를 사용합니다.

//은 SQL * Plus의 주석 마커가 아닙니다. 정확히 반대로 : /은 입력 한 이전 명령을 재실행합니다. 따라서 스크립트는 첫 번째 드롭을 다시 실행합니다.

의견으로는 --을 사용하십시오.

+0

답장을 보내 주셔서 감사합니다. 나는 이것을 (-) 방법으로 시도했다. 그러나 그것은 여전히 ​​두 번 떨어 지려고합니다. 스크린 샷을 보낼 수있는 방법이 있습니까? – Murshed

+0

업데이트 된 스크립트 및 정확한 출력으로 질문을 업데이트하십시오. – Mat

+0

안녕 매트, 도와 주셔서 대단히 감사합니다. 이제 괜찮아. – Murshed

0

어리석은 실수와 오해였습니다. 오라클은 두 번 삭제하려고 시도하지 않았습니다. 그것은 한 번만 떨어졌지만 (필연적으로) 스크립트에서 나는 '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) ; 

감사 SCR.