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.

Tags:,
Petter Rafael
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.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 321 outros assinantes

Busca

outubro 2020
DSTQQSS
 123
45678910
11121314151617
18192021222324
25262728293031

Categorias