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