如何修改现有的检查约束?

时间:2011-02-22 11:45:46

标签: oracle ora-00933

有没有办法修改表上的现有检查约束 除了删除并重新创建

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

4 个答案:

答案 0 :(得分:107)

您必须删除它并重新创建它,但如果您不想这样做,则不必承担重新验证数据的费用。

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

enable novalidate子句将强制插入或更新以强制执行约束,但不会强制对表执行全表扫描以验证所有行是否符合。

答案 1 :(得分:2)

不,你不能这样做。

答案 2 :(得分:2)

首先创建一个新约束,然后删除旧约束 这样你就可以确保:

  • 约束始终存在
  • 现有行不违反新约束
  • 在删除约束之后和应用新约束之前,不会尝试非法的INSERT / UPDATE。

答案 3 :(得分:0)

没有。如果存在此功能,则会在此syntax illustration中列出。 (虽然有可能存在未记录的SQL功能,或者可能有一些我不知道的包。)