web-dev-qa-db-fra.com

Comment modifier une contrainte de vérification existante?

Est-il possible de modifier une contrainte de vérification existante sur une table autre que de la supprimer et de la recréer?

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

Vous devez le supprimer et le recréer, mais vous n'avez pas à supporter le coût de la revalidation des données si vous ne le souhaitez pas.

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

La clause enable novalidate Forcera les insertions ou les mises à jour à appliquer la contrainte, mais ne forcera pas une analyse complète de la table par rapport à la table afin de vérifier la conformité de toutes les lignes.

113
Adam Musch

Créez d'abord une nouvelle contrainte, puis supprimez l'ancienne.
Ainsi, vous vous assurez que:

  • les contraintes sont toujours en place
  • les lignes existantes ne violent pas les nouvelles contraintes
  • aucune tentative INSERT/UPDATE illégale n'est tentée après la suppression d'une contrainte et avant l'application d'une nouvelle contrainte.
3
Witold Kaczurba

NON, vous ne pouvez pas le faire autrement.

2
Oleg Danu

Non. Si une telle fonctionnalité existait, elle serait listée dans ceci illustration de la syntaxe . (Bien qu'il soit possible qu'il existe une fonctionnalité SQL non documentée, ou peut-être un package dont je ne suis pas au courant.)

0
Jon Heller