Categorias
iiiiii
Reglas en Restriciones
Descripcion
Para que una retriccion se aplique despues de la c
Scrippt
Estados de restricci?n
Las restricciones de tabla se pueden habilitar y deshabilitar usando la instrucci?n CREATE TABLE o ALTER TABLE. Adem?s, las palabras clave VALIDATE o NOVALIDATE
se pueden utilizar para alterar la acci?n del estado.
ENABLE VALIDATE : es lo mismo que HABILITAR. La restricci?n se verifica y se garantiza que se cumplir? para todas las filas.
ENABLE NOVALIDATE : significa que la restricci?n se verifica en busca de filas nuevas o modificadas, pero los datos existentes pueden violar la restricci?n.
DISABLE NOVALIDATE: es lo mismo que DISABLE. La restricci?n no se verifica, por lo que los datos pueden violarla.
DISABLE VALIDATE : significa que la restricci?n no est? marcada pero no permite ninguna modificaci?n de las columnas restringidas.
link del los recursos :
1. https://stackoverflow.com/questions/17163580/novalidate-with-error-ora-02299
2. https://oracle-base.com/articles/8i/constraint-checking-updates#:~:text=ENABLE%20NOVALIDATE%20means%20the%20constraint,data%20may%20violate%20the%20constraint.
/**********************************************
********* Ejemplo de ENABLE NOVALIDATE *****
**********************************************/
//Ejemplo se tiene una tabla X con la siguiente estructura
create table add(nombre VARCHAR2);
insert into ('casa');
insert into ('perro');
insert into ('casa');
// si se desea crear un unique contrint para la columna NOMBRE
ALTER TABLE X
ADD CONSTRAINT UQ_X UNIQUE (
nombre
)
ENABLE NOVALIDATE;
//Con lo cual nos lanza un error ora-02299
El error se devuelve porque cuando agrega una UNIQUE restricci?n, Oracle crea un ?ndice ?nico en la columna para verificar
los valores, pero su tabla ya tiene valores duplicados, por lo que falla.
solucion:
1. crear primero un indice para la columna o columnas que deseas de tu uniquecontrint
create index in_X on X (
nomre
);
2. crear el unique contrint
ALTER TABLE X
ADD CONSTRAINT UQ_X UNIQUE (
nombre
)
ENABLE NOVALIDATE; <--------------------Esto indica que la retriccion se aplicara para las nuevas filas y las filas modificadas