Подтвердить что ты не робот

Как изменить существующее ограничение проверки?

Есть ли способ изменить существующее ограничение проверки на таблицу кроме сброса и повторного создания?

create table t ( n number);
ora10g> Tabelle wurde erstellt.

ora10g> alter table t add constraint ck check(n>0);

Tabelle wurde geõndert.

ora10g> alter table t modify constraint ck check(n<0);
alter table t modify constraint ck check(n<0)
                                   *
FEHLER in Zeile 1:
ORA-00933: SQL-Befehl wurde nicht korrekt beendet
4b9b3361

Ответ 1

Вам нужно отказаться от него и воссоздать его, но вам не нужно брать на себя расходы на повторную проверку данных, если вы этого не хотите.

alter table t drop constraint ck ;
alter table t add constraint ck check (n < 0) enable novalidate;

Предложение enable novalidate будет принудительно вставлять вставки или обновления, чтобы принудительное принуждение было ограничено, но не приведет к полному сканированию таблицы по таблице, чтобы проверить соответствие всех строк.

Ответ 2

НЕТ, вы не можете сделать это иначе, чем это.

Ответ 3

Сначала создайте новое ограничение, а затем опустите старый.
Таким образом вы гарантируете, что:

  • всегда существуют ограничения
  • существующие строки не нарушают новые ограничения
  • Никакие незаконные попытки INSERT/UPDATE не предпринимаются после того, как вы отмените ограничение и перед применением нового.

Ответ 4

Нет. Если такая функция существует, она будет указана в этой синтаксической иллюстрации. (Хотя возможно наличие недокументированной функции SQL, или, возможно, есть какой-то пакет, о котором я не знаю.)