2014-04-07 2 views
0

오라클에 테이블을 만들려고하는데이 오류가 나타납니다. 알 수없는 명령 ")"- 나머지 라인이 무시되었습니다. 이 오류의 원인을 파악할 수 없습니다. 아래 표는 내 SQL입니다.오라클에 테이블을 생성하는 중 오류가 발생했습니다.

CREATE TABLE PAYMENT 
    (PayNum INT NOT NULL PRIMARY KEY, 
    CType VARCHAR(1) NOT NULL, 
    CCNum VARCHAR(16) NOT NULL, 
    BankName VARCHAR(75) NOT NULL, 
    AccNum INT NOT NULL, 
    PDate DATE NOT NULL, 
    Amt DECIMAL(11,2) NOT NULL, 
    CONSTRAINT fk_BANKACC_PAYMENT FOREIGN KEY (BankName, AccNum) 
    REFERENCES BANKACC(BankName, AccNum), 
    CONSTRAINT fk_CRCARD_PAYMENT FOREIGN KEY (CType, CCNum) 
    REFERENCES CRCARD(CType, CCNum) 

); 
+4

이 성명을 실행하기 위해 어떤 클라이언트를 사용하고 있습니까? 일부 클라이언트 (예 : SQL * Plus)는 빈 줄을 좋아하지 않으며 닫는 대괄호 앞에 빈 줄이 있습니다. –

+0

이것은 가장 좋아하는 문제이고 Alex Poole의 대답은이 문제를 해결합니다. –

답변

2

코드가 정확합니다. 기본 키를 참조하는지 확인하십시오 (모두 4 개). 확인이 : http://sqlfiddle.com/#!2/7be70/1/0

당신이를 따르지 않을 경우,이 오류가 발생할 수 있습니다 : 외래 키 'fk_BANKACC_PAYMENT'에서 참조하는 열 목록과 일치 참조 된 테이블 'BANKACC'에는 기본 또는 후보 키가 없습니다.

또한
CREATE TABLE BANKACC 
(BankName VARCHAR(75) NOT NULL, 
    AccNum INT NOT NULL, 
PRIMARY KEY(BankName, AccNum)); 

CREATE TABLE CRCARD 
(CType VARCHAR(1) NOT NULL, 
    CCNum VARCHAR(16) NOT NULL, 
PRIMARY KEY(CType, CCNum)); 

CREATE TABLE PAYMENT 
    (PayNum INT NOT NULL PRIMARY KEY, 
    CType VARCHAR(1) NOT NULL, 
    CCNum VARCHAR(16) NOT NULL, 
    BankName VARCHAR(75) NOT NULL, 
    AccNum INT NOT NULL, 
    PDate DATE NOT NULL, 
    Amt DECIMAL(11,2) NOT NULL, 
    CONSTRAINT fk_BANKACC_PAYMENT FOREIGN KEY (BankName, AccNum) 
    REFERENCES BANKACC(BankName, AccNum), 
    CONSTRAINT fk_CRCARD_PAYMENT FOREIGN KEY (CType, CCNum) 
    REFERENCES CRCARD(CType, CCNum) 

); 

당신이 외래 키 제약 조건 구현하는 방법에 대한 더 나은 이해를 위해 이것을 읽어야 : 당신은 SQL * 플러스에서 이것을 실행하는 경우 http://docs.oracle.com/cd/E17952_01/refman-5.5-en/create-table-foreign-keys.html

2

을의 제거 위의 바이올린에 코드 REFERENCES) 사이에 빈 줄 :

REFERENCES CRCARD(CType, CCNum) 
); 

또는 set sqlblanklines on to change the behaviour.

기본적으로 빈 줄을 명령문의 끝으로 해석하지만 실행하지는 않습니다. 따라서 전체 CREATE TABLE 명령은 본질적으로 무시되며 );은 stanalone 명령으로 처리됩니다. 따라서 자체적으로 아무 것도 의미하지 않기 때문에 오류 메시지가 나타납니다.

+0

피터 (Peter) 피터 (Peter Lord)는 얼마전에이 점에 대해 언급했다. –

+1

+1 나는 sqlblanklines 설정에 대해 몰랐다. –

관련 문제