referencial - modificar llave primaria oracle
cómo modificar una restricción de verificación existente? (4)
Debe soltarlo y volver a crearlo, pero no tiene que incurrir en el costo de revalidar los datos si no lo desea.
alter table t drop constraint ck ;
alter table t add constraint ck check (n < 0) enable novalidate;
La cláusula enable novalidate
forzará a las inserciones o actualizaciones a enable novalidate
la restricción, pero no forzará un escaneo completo de tabla contra la tabla para verificar que todas las filas cumplan.
¿Hay alguna manera de modificar una restricción de verificación existente en una tabla que no sea soltarla y volver a crearla ?
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
NO, no puedes hacerlo de otra manera.
No. Si tal característica existiera, se enumeraría en esta ilustración de sintaxis . (Aunque es posible que exista una característica de SQL no documentada, o tal vez haya algún paquete del que no tenga conocimiento).
Primero crea una nueva restricción y luego descarta la anterior.
De esa forma, se asegurará de que:
- las restricciones siempre están en su lugar
- Las filas existentes no violan nuevas restricciones
- no se intenta INSERT / UPDATE ilegal después de eliminar una restricción y antes de aplicar una nueva.