sql >> Base de Datos >  >> RDS >> Oracle

Cómo crear una restricción no nula en Oracle

Lo que no es una restricción nula en Oracle

Las restricciones Not Null en Oracle se utilizan para imponer valores no nulos en la columna de la tabla. Entonces, si intenta insertar un valor nulo en esa columna, arrojará un error.

Cómo crear una restricción no nula

Las restricciones de No nulo se definen en la creación de la tabla o puede modificar la tabla, más adelante, para cambiar una columna a No nulo. Echemos un vistazo a los ejemplos.

Creación de tablas
La restricción no nula se especifica en línea con la columna.

SQL> CREATE TABLE "EMP"
    ("EMPNO" NUMBER(4,0) Not Null,
     "ENAME" VARCHAR2(10) Not null,
     "JOB" VARCHAR2(9),  
     "MGR" NUMBER(4,0),       
     "HIREDATE" DATE,
     "SAL" NUMBER(7,2) ,  
     "COMM" NUMBER(7,2),
     "DEPTNO" NUMBER(2,0)
      );

 Table created. 

Aquí hemos definido dos restricciones no nulas en la tabla emp. Podemos verificar las restricciones No nulas en la tabla usando la siguiente consulta

SQL> column CONSTRAINT_NAME format a20
SQL> column SEARCH_CONDITION format a50
SQL> SELECT Constraint_name, Search_condition
     FROM User_constraints
     WHERE Table_name = 'EMP'  AND    
     Constraint_type = 'C';

Las restricciones no nulas también se definen como restricciones de verificación y tienen condiciones de búsqueda como nombre de columna no nulo

Agregar la restricción No después de la creación de la tabla

Podemos modificar la tabla para agregar la restricción no nula

SQL> alter table emp modify ("HIREDATE" not null);
 Table altered.

Si tenemos datos nulos en la columna existente, esta declaración fallará

SQL> SELECT Constraint_name, Search_condition
     FROM User_constraints
     WHERE Table_name = 'EMP'  AND
     Constraint_type = 'C'

También podemos dar el nombre personalizado a la restricción Not Null. Aquí está el ejemplo para demostrarlo

SQL> CREATE TABLE "EMP"
 ("EMPNO" NUMBER(4,0) Constraint EMP_NOTNULL Not Null,  
 "ENAME" VARCHAR2(10) Not null,
 "JOB" VARCHAR2(9),
 "MGR" NUMBER(4,0),
 "HIREDATE" DATE,
 "SAL" NUMBER(7,2) ,
 "COMM" NUMBER(7,2),
 "DEPTNO" NUMBER(2,0)
  );

 Table created.
 SQL> column CONSTRAINT_NAME format a20
 SQL> column SEARCH_CONDITION format a50
 SQL> SELECT Constraint_name, Search_condition
     FROM User_constraints
     WHERE Table_name = 'EMP'  AND
     Constraint_type = 'C';
 SQL> alter table emp modify ("HIREDATE" Constraint H_NOTNULL  Not    Null);
 
Table altered.
 SQL> SELECT Constraint_name, Search_condition
      FROM User_constraints
      WHERE Table_name = 'EMP'  AND
      Constraint_type = 'C';

Cómo descartar la restricción Not Null

Necesitamos modificar la columna para aceptar valores nulos

SQL>alter table emp modify "HIREDATE" Null;

Table altered.

SQL> SELECT Constraint_name, Search_condition
     FROM User_constraints
     WHERE Table_name = 'EMP'  AND
     Constraint_type = 'C';

También podemos descartar la restricción no nula usando el comando de restricción de eliminación de tabla alter

SQL> alter table emp drop constraint  EMP_NOTNULL ;
Table altered;

SQL> SELECT Constraint_name, Search_condition
     FROM User_constraints
     WHERE Table_name = 'EMP'  AND
     Constraint_type = 'C';

Cómo agregar una restricción no nula en la columna que contiene valores nulos

Si intenta agregar una restricción no nula en la columna que contiene valores nulos, ese comando fallará ya que validará todas las filas, todas las filas existentes para la restricción no nula. A veces, queremos mantener los valores nulos existentes y verificar que las filas futuras contengan un valor no nulo para esta columna, luego, en ese caso, podemos habilitar la restricción con la cláusula novalidate. Con esta cláusula, no verificará las filas existentes, pero se verificarán las filas futuras

alter table emp modify "HIREDATE" not Null novalidate;

Leer también
soltar la clave principal de Oracle
Clave externa en Oracle
Restricción de clave única en Oracle
cómo verificar todas las restricciones en una tabla en Oracle
Oracle alterar tabla modificar tipo de columna
https://docs.oracle.com/cd/B28359_01/server.111/b28310/general005.htm#ADMIN11554