O que não é restrição Null no oracle
As restrições Not Null no oracle são usadas para impor valores não nulos na coluna da tabela. Portanto, se você tentar inserir null nessa coluna, ele gerará um erro.
Como criar uma restrição não nula
As restrições não nulas são definidas na criação da tabela ou você pode modificar a tabela, posteriormente, para que uma coluna seja alterada para Não nula. Vejamos os exemplos.
Criação de tabela
A restrição não nula é especificada em linha com a coluna.
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.
Aqui definimos duas restrições não nulas na tabela emp. Podemos verificar as restrições Not null na tabela usando a consulta abaixo
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';
Restrições Not Null também são definidas como restrições de verificação e têm condições de pesquisa como nome de coluna não nulo
Adicionando restrição Not após a criação da tabela
Podemos modificar a tabela para adicionar a restrição not null
SQL> alter table emp modify ("HIREDATE" not null); Table altered.
Se tivermos dados nulos na coluna existente, essa instrução falhará
SQL> SELECT Constraint_name, Search_condition FROM User_constraints WHERE Table_name = 'EMP' AND Constraint_type = 'C'
Podemos dar o nome personalizado para a restrição Not Null também. Aqui está o exemplo para demonstrá-lo
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';
Como eliminar a restrição Not Null
Precisamos modificar a coluna para aceitar 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';
Também podemos eliminar a restrição not null usando o comando alter table drop constraint
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';
Como adicionar restrição não nula na coluna que contém valores nulos
Se você tentar adicionar uma restrição não nula na coluna que contém valores nulos, esse comando falhará, pois validará todas as linhas todas as linhas existentes para a restrição não nula. Às vezes, queremos manter os valores nulos existentes e verificar se as linhas futuras contêm um valor não nulo para esta coluna, então, nesse caso, podemos habilitar a restrição com a cláusula novalidate. Com esta cláusula, ele não verificará as linhas existentes, mas as linhas futuras serão verificadas
alter table emp modify "HIREDATE" not Null novalidate;
Leia também
soltar chave primária oracle
Chave estrangeira no oracle
Restrição de chave única no Oracle
como verificar todas as restrições em uma tabela no oracle
oracle alterar tabela modificar tipo de coluna
https://docs.oracle.com/cd/B28359_01/server.111/b28310/general005.htm#ADMIN11554