Как изменить существующее ограничение проверки?
Есть ли способ изменить существующее ограничение проверки на таблицу
кроме сброса и повторного создания?
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
Ответы
Ответ 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, или, возможно, есть какой-то пакет, о котором я не знаю.)