quarta-feira, 13 de março de 2013

Comparação com NULL


Quando um variável ou um campo no Oracle está NULL, ele não pode ser simplesmente comparado a um outro valor, pois o resultado da comparação também será falso.

Veja abaixo:


DECLARE
  C1 VARCHAR2(20) := NULL;
  C2 VARCHAR2(20) := '13240';
BEGIN
  IF C1 <> C2 THEN
    DBMS_OUTPUT.PUT_LINE('é diferente');
  ELSE
    DBMS_OUTPUT.PUT_LINE('é igual');
  END IF;
END;

Resultado: é igual



DECLARE
  C1 VARCHAR2(20) := NULL;
  C2 VARCHAR2(20) := '13240';
BEGIN
  IF C1 = C2 THEN
    DBMS_OUTPUT.PUT_LINE('é diferente');
  ELSE
    DBMS_OUTPUT.PUT_LINE('é igual');
  END IF;
END;

Resultado: é igual

Em ambos os scripts, mesmo tendo alterado as comparações o resultado sempre entra no else.

Para resolver este problema, sempre que realizar uma comparação e o campo a ser comparado permitir NULL em seu conteúdo deve-se usar a função NVL para trocar o valor NULL por qualquer outro valor (o valor vai depender do tipo de comparação desejada) para que a comparação possa ser feita.


DECLARE
  C1 VARCHAR2(20) := NULL;
  C2 VARCHAR2(20) := '13240';
BEGIN
  IF nvl(C1,'*') <> C2 THEN
    DBMS_OUTPUT.PUT_LINE('é diferente');
  ELSE
    DBMS_OUTPUT.PUT_LINE('é igual');
  END IF;
END;

Restulado: é diferente




Nenhum comentário :

Postar um comentário

Related Posts Plugin for WordPress, Blogger...