Cuidado ao testar variáveis alimentadas dinamicamente

[ad#texto]
É extremamente comum em qualquer script PL/SQL que uma variável qualquer seja alimentada dinamicamente, como o exemplo abaixo:

Select campoTabela
 Into minhaVar
From Tabela

Em seguida, no mesmo script podemos ter a necessidade de comparar esta variável com outros valores, sejam eles contidos em outras variáveis ou não, como no exemplo abaixo (neste caso assumimos que ambas as variáveis são do tipo NUMBER e que a minhaVar2 já está alimentada de outro ponto do meu script):

If minhaVar = minhaVar2 then
 -- Faz minha lógica
End if;

Tudo muito simples, porém, por falta de experiência ou mesmo por descuido do programador o teste acima pode falhar, basta que uma das variáveis esteja nula, isso mesmo, supondo que a QUERY do primeiro exemplo não retorne nada, neste caso a variável minhaVar será nula e levará o seu teste (IF) ao erro.

Como é difícil ter plena certeza de que as minhas variáveis nunca serão nulas (antes que gritem, se no caso a tabela do primeiro exemplo tivesse aquele campo como NOT NULL em teoria a variável nunca seria nula, a não ser que a QUERY não fosse executada.

Uma simples e elegante solução pode ser utilizada como no exemplo abaixo:

If NVL(minhaVa,0)  = NVL(minhaVar2,0) then
 -- Faz minha lógica
End if;

Simples assim, o comando NVL do Oracle tem a função de permitir que seja determinado um valor default no caso da variável ser nula, no caso definimos o valor default como zero, mas funciona muito bem com STRING também.

Petter Rafael

Desenvolvedor Web atua com as tecnologias Java e PHP apoiadas pelos bancos de dados Oracle e MySQL. Além dos ambientes de desenvolvimento acima possuiu amplo conhecimento em servidores Apache/Tomcat, Photoshop, Arte & Foto, Flash e mais uma dezena de ferramentas e tecnologias emergentes. Atualmente colabora com o Viablog escrevendo sobre programação e tecnologia.