テーブルの既存のチェック制約を変更する方法はありますか?削除して再作成する以外に?
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
削除して再作成する必要がありますが、必要ない場合はデータの再検証のコストを負担する必要はありません。
alter table t drop constraint ck ;
alter table t add constraint ck check (n < 0) enable novalidate;
enable novalidate
句は、挿入または更新によって制約を強制しますが、すべての行が準拠していることを確認するためにテーブルに対してテーブル全体のスキャンを強制しません。
最初に新しい制約を作成してから、古い制約を削除します。
そのようにして、次のことを確認します。
いいえ、それ以外の方法ではできません。
いいえ。そのような機能が存在する場合、この 構文図 にリストされます。 (文書化されていないSQL機能がある可能性はありますが、おそらく知らないパッケージがあるかもしれません。)