Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como criar restrição not null no oracle

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