Gibt es eine andere Möglichkeit, eine vorhandene Prüfbedingung für eine Tabelle zu ändern, als 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
Antworten:
Sie müssen es löschen und neu erstellen, aber Sie müssen 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;
Die
enable novalidate
Klausel erzwingt das Erzwingen der Einschränkung für Einfügungen oder Aktualisierungen, erzwingt jedoch keinen vollständigen Tabellenscan für die Tabelle, um zu überprüfen, ob alle Zeilen übereinstimmen.quelle
Erstellen Sie zuerst eine neue Einschränkung und löschen Sie dann die alte.
Auf diese Weise stellen Sie sicher, dass:
quelle
NEIN, du kannst es nicht anders machen.
quelle
Nein. Wenn eine solche Funktion vorhanden wäre, würde sie in dieser Syntaxabbildung aufgeführt . (Obwohl es möglich ist, dass es eine undokumentierte SQL-Funktion gibt, oder vielleicht ein Paket, das mir nicht bekannt ist.)
quelle