Gibt es eine Möglichkeit, eine vorhandene Prüfbedingung für eine Tabelle zu ändern außer sie zu löschen und neu zu erstellen?
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
Sie müssen es löschen und neu erstellen, müssen jedoch nicht die Kosten für die erneute Validierung der Daten tragen, wenn Sie dies nicht möchten.
alter table t drop constraint ck ;
alter table t add constraint ck check (n < 0) enable novalidate;
Das enable novalidate
-Klausel erzwingt, dass Einfügungen oder Aktualisierungen die Einschränkung erzwingen, erzwingt jedoch keinen vollständigen Tabellenscan für die Tabelle, um sicherzustellen, dass alle Zeilen übereinstimmen.
Erstellen Sie zuerst eine neue Einschränkung und löschen Sie dann die alte.
So stellen Sie sicher, dass:
NEIN, anders geht es nicht.
Nein. Wenn eine solche Funktion vorhanden wäre, würde sie in diesem Syntaxabbildung aufgeführt. (Obwohl es möglich ist, dass es eine undokumentierte SQL-Funktion gibt, oder vielleicht gibt es ein Paket, das mir nicht bekannt ist.)