Получение ошибки ORA-00905 при попытке добавить внешний ключ - PullRequest
2 голосов
/ 30 декабря 2010

Я пытаюсь выполнить следующее утверждение в оракуле:

alter table COMENTARIO
add constraint FK_COMENTARIO_DI foreign key (DI_ID)
  references DATO_DE_INTERES (DI_ID) ON UPDATE CASCADE ON DELETE SET NULL;

Однако я получаю пропущенное ключевое слово ORA-00905.

Когда я удаляю оператор ON UPDATE, команда работает без проблем. Почему это? Есть ли варианты, если я не могу использовать ОБНОВЛЕНИЕ? Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 30 декабря 2010

Для каскадных ограничений нет предложения «ON UPDATE».Я не знаю каких-либо альтернатив, кроме принудительного применения приложений или триггеров.

1 голос
/ 30 декабря 2010

В Oracle нет предложения ON UPDATE в определении ограничения. В подавляющем большинстве случаев вы не захотите реализовывать это «на всякий случай», потому что первичные ключи должны быть неизменяемыми. Если ваши первичные ключи не являются неизменяемыми, это, как правило, указывает на проблему модели данных, которую следует решать, а не кодировать.

Тем не менее, если вы действительно хотите реализовать нечто подобное, у Тома Кайта есть пакет каскада обновлений . Но вам гораздо лучше спроектировать систему, чтобы избежать проблемы в первую очередь, чем проектировать на этом уровне сложности.

1 голос
/ 30 декабря 2010

В Oracle нет такой опции, как ОБНОВЛЕНИЕ КАСКАДА.Возможно, вместо того, чтобы искать способ реализовать это (я думаю, что это возможно с помощью триггера ON UPDATE), вы можете сказать, зачем вам это нужно.Я имею в виду - почему вы хотите обновить первичный ключ DATO_DE_INTERES?

...