segunda-feira, 17 de novembro de 2014

Nulo não é nada!!!






Encontrei esse título em um capítulo do livro OCA Oracle Database 11g:SQL Fundamentals I - Exam Guide (Exam 1Z0-051) e simplesmente me apaixonei pela definição na verdade o título é NULL Is Nothing traduzi para usar aqui no Blog!

Lembro quando comecei a estudar banco de dados lá em 2008 ainda na faculdade eu tinha o costume de considerar Null como 0 (zero), mas estava errada, nulo não era 0 e também não era um espaço em branco Null simplesmente não é nada, podemos considerar Null como a definição da não existência, ou a existência indefinida?

Antes de começar a estudar para a certificação, já tinha entendido e começado a trabalhar com o Null quase que diariamente, porém nunca havia encontrado uma definição tão simples objetiva e correta sobre a informação Null.

Resolvi escrever um post com essa definição após um dos simulados que fiz para a prova 1Z0-051 onde apareceu a questão abaixo:

Which expressions do not return NULL values? (Choose all that apply.)

A.select ((10 + 20) * 50) + null from dual;
B.select 'this is a '||null||'test with nulls' from dual;
C.select null/0 from dual;
D.select null||'test'||null as “Test” from dual;

Foi aí que me surgiu uma dúvida em relação a alternativa C, sabemos que qualquer numero divido por 0 vai dar um erro ORA-01476 e que qualquer conta onde um dos fatores seja igual a Null será Null.

Sendo assim ao dividir Null/0 qual regra seria prioritária?

Claro que eu poderia ir no banco e fazer o teste prático mas acabei entrando em um debate filosófico com alguns colegas de trabalho muitos argumentos bons surgiram entre eles que o Oracle iria primeiro validar se era possível executar a query e por isso o erro apareceria ou que o Null simplesmente iria anular tudo inclusive o erro.

Concluímos assim que ir no banco e executar a query seria a melhor solução portanto segue resultado:

O resultado foi Null, porque realmente o nulo não é nada e como dividir nada, como gerar um erro com nada?

Se tentarmos dividir uma palavra ou uma letra por 0 (zero) temos o erro ORA-01722 que é diferente do erro de divisão por 0 (zero) senda o Null igual a nada como seria possível o banco definir qual erro apresentar?


Desta forma podemos concluir com bases práticas e teóricas que o Null não é nada, não é (0) zero e nem um espaço em branco o Null é uma referência de que aquela variável não possui nada.

Null é diferente de Null

Essa é uma outra máxima que temos que lembrar sempre em banco de dados ( e em 99% das linguagens de programação, não escrevo 100% porque não estudei a fundo todas as linguagens de programação) se definir a variável  A como Null e a variável B como Null A nunca será igual a B.

Porque como vimos anteriormente Null não é nada é algo totalmente indefinido, como duas coisas indefinidas seriam iguais?

Para comparar variáveis ou colunas que podem ter o valor Null usamos a função NVL

NVL(VARIAVEL,0) 

 Desta forma ao comparar A com B a sintaxe mudaria de:
 Para:

 Podemos perceber que a única diferença entre a primeira e a segunda imagem é o uso da função NVL. Recomendo o uso desta função sempre que for comparar colunas que possam conter valores nulos.

Copyright:

O Conteúdo desde Blog não deve ser publicado, distribuído ou transmitido sem autorização prévia de seu autor.

ESTE É UM SITE INDEPENDENTE E NÃO REPRESENTA A ORACLE CORPORATION® (http://www.oracle.com) EM NENHUM SENTIDO. AS OPINIÕES E CONTEÚDOS AQUI ENCONTRADOS NÃO POSSUEM RELAÇÃO COM A VISÃO DA ORACLE CORPORATION®. ESTE SITE NÃO POSSUI NENHUM APOIO OU PATROCINIO DA ORACLE CORPORATION®.