Null value no oracle database







O que os valores NULL representam no oracle?

Você sabia que o Oracle Database trata string de tamanho zero como um null? Pois é, o oracle database considera que uma string/texto de tamanho zero é um valor nulo. Contudo, é bom observar que uma string composta de um caractere de espaço em branco é diferente de null, pois um caractere de espaço em branco é uma string de tamanho maior que zero e contém um dado.

Outro ponto passível de confusão é tratar o valor zero ( 0 ) como nulo. Observe que o zero representa um valor conhecido. No Oracle Database, null representa um valor desconhecido ou ausente. Representa a ausência de dados de uma coluna ou de uma expressão.

OBS: A documentação do Oracle Database 19c, alerta que apesar de atualmente uma string de tamanho zero ser considerada como um valor nulo (null), isso pode deixar de ser verdade em releases futuras.

Null, quando não é tratado de forma adequada pode causar confusão em instruções SQL e apresentar resultados diferentes do que havia sido originalmente imaginado.

Comparação de null com operadores relacionais
O uso de null com operadores relacionais também é fonte de muitas confusões no oracle database. Por exemplo, não é recomendado usar os operadores de igualdade (=) ou desigualdade (!= | <>) para testar se um valor é nulo ou não nulo. Vamos usar a tabela FUNCIONARIOS para validar essas afirmações.

CREATE TABLE FUNCIONARIOS(
ID INTEGER,
NOME VARCHAR2(30),
CARGO VARCHAR2(30)
);
INSERT INTO FUNCIONARIOS VALUES (1,'GABRIEL','CONTADOR');
INSERT INTO FUNCIONARIOS VALUES (2,'FELIPE',' ');
INSERT INTO FUNCIONARIOS VALUES (3,'MATEUS',''); 
INSERT INTO FUNCIONARIOS VALUES (4'SAMUEL',NULL);
INSERT INTO FUNCIONARIOS VALUES (5'JUCIMAR','MÉDICO');

Considerando os dados da tabela FUNCIONARIOS vamos selecionar todos os usuários cujo cargo seja diferente de NULL. Observe que estou usando o operador de desigualdade (<>) buscando CARGO <> NULL. Contudo, apesar dos funcionários de código 1, 2 e 5 possuírem o cargo diferente de null, eles não foram retornados na consulta.

SQL> SELECT * FROM FUNCIONARIOS WHERE CARGO <> NULL;
no rows selected 

Também quando uso o operador de igualdade (=) na expectativa de retornar os funcionários de código 3 e 4, a consulta não retorna nada. Isso acontece pelo fato de null representar a falta de um dado. Dessa forma, ele não pode ser considerado igual ou desigual a qualquer valor, nem mesmo pode ser igual a outro null.

SQL> SELECT * FROM FUNCIONARIOS WHERE CARGO = NULL;

no rows selected 

Para testar se um valor é nulo ou não nulo, o correto é usar as condições de comparação IS NULL ou IS NOT NULL . Neste caso, para retornar todos os funcionários cujo cargo seja diferente de NULL eu uso a seguinte consulta:

SQL> SELECT * FROM FUNCIONARIOS WHERE CARGO IS NOT NULL;

        ID NOME                           CARGO
---------- ------------------------------ ------------------------------
         1 GABRIEL                        CONTADOR
         2 FELIPE
         5 JUCIMAR                        MEDICO 

Observe que o funcionário Felipe, de id 2 também retornou no conjunto de funcionários cujo cargo não é nulo, pois o valor ' ' (espaço em branco) é diferente de null.

Agora vamos testar uma consulta para retornar os funcionários cujo cargo seja nulo (null).

SQL> SELECT * FROM FUNCIONARIOS WHERE CARGO IS NULL;

        ID NOME                           CARGO
---------- ------------------------------ ------------------------------
         3 MATEUS
         4 SAMUEL 

Observe que o funcionário de código 3, cujo cargo é um string de tamanho 0 (zero) retornou no conjunto de usuários cujo cargo é null. Isso comprova a afirmação de que uma string de tamanho zero é considerada pelo Oracle Database como um valor nulo.

Operações aritméticas com valor Null

Outro ponto comum de confusão com o tratamento de valores nulos (null) no Oracle database são as expressões aritméticas. Quando uma subtração, divisão, soma ou multiplicação é realizada envolvendo um valor null, o resultado também é null. Por exemplo, é fácil cometer o equívoco de esperar dois quando somamos 2 + null, contudo, como null representa a ausência de um valor ou um valor desconhecido, o retorno dessa expressão também é desconhecido, logo a saída de 2 + null = null.

Espero que as informações acima sejam úteis para alguém.

Até breve....


Postar um comentário

0 Comentários