Отсутствует ключевое слово в коде SQL для внешних ключей, не удается создать таблицу

#sql #oracle #oracle11g #attributes #foreign-keys

#sql #Oracle #oracle11g #атрибуты #внешние ключи

Вопрос:

Пытаюсь создать таблицу с помощью кода SQL, но получаю сообщение об ошибке:

Отсутствует ключевое слово

что касается внешнего ключа.

 CREATE TABLE Staff 
(
    staffID VARCHAR(5) NOT NULL,
    name VARCHAR(50), 
    position VARCHAR(30),
    branchID VARCHAR(5),
    PRIMARY KEY (staffID),
    FOREIGN KEY (branchID) REFERENCES Branch ON UPDATE CASCADE
);
  

Ответ №1:

В отличие от других СУБД (например, MySQL), Oracle не поддерживает ON UPDATE предложение во внешних ключах. Вам просто нужно будет удалить эту часть объявления.

Попробуйте:

 CREATE TABLE Staff (
    staffID VARCHAR(5) NOT NULL,
    name VARCHAR(50), 
    position VARCHAR(30),
    branchID VARCHAR(5),
    PRIMARY KEY (staffID),
    FOREIGN KEY (branchID) REFERENCES Branch(branchID) --ON UPDATE CASCADE
);
  

Демонстрация на скрипте DB

Логика такого поведения Oracle заключается в том, что указанный столбец не должен изменяться, поскольку он должен быть PRIMARY KEY (или UNIQUE столбцом). Я считаю, что это ограничение имеет смысл … они просто не хотят давать пользователям достаточно веревки, чтобы повеситься.

Комментарии:

1. Большое спасибо. Полностью имеет смысл, и не могу поверить, что это было так просто. Извините, я довольно новичок в SQL. Но спасибо за разъяснение!

2. Как насчет каскадных удалений? Я вижу ограничение обновлений по этой причине, но не удаляет.

3. @Omnifarious: да, ON DELETE CASCADE разрешено в Oracle. Смотрите документацию .

4. @NicoleVelos: Добро пожаловать! Я могу гарантировать, что большинство из нас когда-то попадало в эту ловушку (я, по крайней мере, попал!).

5. @GMB: Итак, я попытался создать таблицу, но теперь у меня ошибка с указанием «таблица или представление не существует» — я так смущен этим сейчас.