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