TECNOLOBO

No recuerdas tu codigo?
Se te olvido como se hace?

Aqui podras guardar lo que necesiten
Y cuando sea necesesario

Creado por julian gomez
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