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

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: отсутствует ключевое слово

вот две другие таблицы между прочим.

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)
);

2 ответа

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

Цитата из руководства:

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

Вот SQLFiddle: http://sqlfiddle.com/

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

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
);
Другие вопросы по тегам