2013-02-18 3 views
1
CREATE TABLE SORDER (
    C_NO CHAR(4), 
    P_NO CHAR(4), 
    QUANTITY SMALLINT, 
    PRIMARY KEY (C_NO, P_NO), 
    CONSTRAINT CNO_FK FOREIGN KEY (C_NO) REFERENCES CUSTOMER ON DELETE RESTRICT, 
    CONSTRAINT PNO_FK FOREIGN KEY (P_NO) REFERENCES PRODUCT2 ON DELETE RESTRICT 
); 

ORA-00905: отсутствует ключевое словоПочему отсутствует ошибка ключевого слова?

вот две другие таблицы BTW.

CREATE TABLE PRODUCT2 (
    P_NO CHAR(4) PRIMARY KEY, 
    P_NAME CHAR(6), 
    PRICES DECIMAL(3,2), 
    STOCK SMALLINT 
); 

CREATE TABLE CUSTOMER2 (
    C_NO CHAR(4) PRIMARY KEY, 
    C_NAME CHAR(6), 
    CITY CHAR(11) 
); 
+0

Btw: вы * * not ** хотите использовать 'CHAR (n)' use 'VARCHAR (n)' вместо –

+1

Я также уверен, что вы не хотите 'decimal (3,2)'. При этом максимальная цена, которую вы можете сохранить, составляет 9.99 –

ответ

-6

Попробуйте приведенный ниже код

CREATE TABLE SORDER (
    C_NO CHAR(4), 
    P_NO CHAR(4), 
    QUANTITY SMALLINT, 
    PRIMARY KEY (C_NO, P_NO), 
    CONSTRAINT CNO_FK FOREIGN KEY (C_NO) REFERENCES CUSTOMER ON DELETE RESTRICT, 
    CONSTRAINT PNO_FK FOREIGN KEY (P_NO) REFERENCES PRODUCT2 ON DELETE RESTRICT 
); 
+1

Какая разница с исходным SQL? –

+0

Это именно тот код, который он пробовал :) –

+0

такая же ошибка, как раньше. – user2082958

5

Oracle поддерживает только ON DELETE SET NULL или ON DELETE CASCADE в качестве ключевого слова. Функциональность ON DELETE RESTRICT достигается при отбрасывании ON DELETE

CREATE TABLE SORDER (
    C_NO CHAR(4), 
    P_NO CHAR(4), 
    QUANTITY SMALLINT, 
    PRIMARY KEY (C_NO, P_NO), 
    CONSTRAINT CNO_FK FOREIGN KEY (C_NO) REFERENCES CUSTOMER2, 
    CONSTRAINT PNO_FK FOREIGN KEY (P_NO) REFERENCES PRODUCT2 
); 

Подробности смотрите в руководстве: http://docs.oracle.com/cd/B28359_01/server.111/b28286/clauses002.htm#CJABCJJF

Цитата из инструкции:

ON DELETE положение позволяет определить, как Oracle База данных автоматически сохраняет ссылочную целостность, если вы удаляете ссылочное первичное или уникальное значение ключа. Если опустить этот пункт, то Oracle не позволяет удалить ссылки значений ключа в родительской таблице, которые имеют зависимые строки в дочерней таблице

Вот SQLFiddle: http://sqlfiddle.com/#!4/07e93/1

+0

Плюс название таблицы неверно ... – Ben

+0

Не понимал полностью, я оставляю только ограничивать? – user2082958

+0

Как установить то этот Первичный ключ: C_NO + P_NO внешнего ключа: C_NO Ссылки таблицы клиентов, Ограничение на Удаление внешнего ключа: P_NO Ссылки таблицы Product, Ограничение на Delete – user2082958

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