webentwicklung-frage-antwort-db.com.de

Wie ändere ich eine bestehende Prüfbedingung?

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
64
schurik

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.

113
Adam Musch

Erstellen Sie zuerst eine neue Einschränkung und löschen Sie dann die alte.
So stellen Sie sicher, dass:

  • einschränkungen sind immer vorhanden
  • bestehende Zeilen verstoßen nicht gegen neue Einschränkungen
  • es werden keine illegalen INSERT/UPDATE-Vorgänge versucht, nachdem Sie eine Einschränkung gelöscht haben und bevor eine neue angewendet wird.
3
Witold Kaczurba

NEIN, anders geht es nicht.

2
Oleg Danu

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.)

0
Jon Heller