2014-04-07 3 views
0

Я пытаюсь создать таблицу в оракуле, но я получаю эту ошибку: неизвестная команда ")" - остальная часть строки игнорируется. Я не могу понять, что вызывает эту ошибку. Ниже мой SQL для таблицы:Ошибка создания таблицы в oracle

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

Это наиболее похоже на проблему, и ответ Алекс Пул обращается к этому. –

ответ

0

Пожалуйста, используйте NUMBER для числовых столбцов.

http://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT313

Кроме того, в Oracle, использовать VARCHAR2 строк.

, но из-за этого ваш синтаксис должен быть правильным.

+0

'INT' является синонимом' NUMBER'. И нет ничего плохого в «VARCHAR». это синоним 'VARCHAR2'. –

2

Ваш код верен. Убедитесь, что вы ссылаетесь на первичные ключи (все 4). Проверьте это: http://sqlfiddle.com/#!2/7be70/1/0

Если вы не будете следовать, что вы можете получить эту ошибку: Там нет первичных или кандидатов ключей в ссылочной таблице «BANKACC», которые соответствуют списку столбцов реферирования во внешнем ключе «fk_BANKACC_PAYMENT». код в приведенной выше скрипке:

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) 

); 

Также вы должны прочитать это для лучшего понимания о том, как реализовать ограничение внешнего ключа: http://docs.oracle.com/cd/E17952_01/refman-5.5-en/create-table-foreign-keys.html

2

Если вы используете это в SQL * Plus, избавиться от пустая строка между REFERENCES и ):

REFERENCES CRCARD(CType, CCNum) 
); 

Или set sqlblanklines on to change the behaviour.

По умолчанию он интерпретирует пустую строку как конец инструкции, но не запускает ее. Поэтому вся ваша команда CREATE TABLE по существу игнорируется, а ); рассматривается как команда stanalone. Отсюда сообщение об ошибке, которое вы получаете, поскольку оно ничего не значит.

+0

Только что заметил, что лорд Питер упомянул об этом в комментарии некоторое время назад ... –

+1

+1 Я не знал о настройке sqlblanklines. –

Смежные вопросы