|
|
| Mensagem |
Autor |
| Enviada: Sáb, 15 Mai 2004 7:14 pm Assunto: [Dica] Comparação de Campos NULL |
|
|
Sabemos que 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 compração também será false!
| Código: | declare
a number:=null;
b number:=null;
begin
if a=b
then dbms_output.put_line('SIM');
else dbms_output.put_line('não');
end if;
end;
SQL> /
não |
POUCO EFICIENTE
Para "sanar" este problema, é possivel usar NVL, que não é uma boa prática. Veremos porque:
| Código: | if nvl(a, 123456789) = nvl(b, 123456789)
then --seu código |
Isso funciona, se o valor for diferente de 123456789. Se o valor for igual, ferra a comparação!
MUITO EFICIENTE
A melhor prática possível
É um pouco trabalhosa, mas sempre funcionará:
| Código: |
if a<>b
or (a is null and b is not null)
or (a is not null and b is null)
then --seu codigo |
|
|
dr_gori Moderador


Registrado em: Seg, 3 de Mai de 2004 Mensagens: 3222 Cidade - UF: Porto Alegre - RS
|
|
|
 |
| Enviada: Qui, 19 Ago 2004 11:24 am Assunto: NULL IS NULL |
|
|
Como podem ver Null não é igual, ou diferente
de null, ou maior ou menor.
Quando você compara Null, deve ser sempre
IS NULL ou IS NOT NULL
Cuidado quando você usa NVL em consultas do tipo:
| Código: | select 1 from TABELA
WHERE codigo = NVL(VARIAVEL, codigo ) |
Isso funciona pra trazer todos os valores da Tabela quando a variavel for igual ao código, mas se o código for Null, não funcionará...
prefira usar:
| Código: | select 1 from TABELA
WHERE codigo = VARIAVEL
OR (codigo is null and VARIAVEL is null) |
O código abaixo não mostra nada.
| Código: | SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 A NUMBER DEFAULT NULL;
3 B NUMBER DEFAULT NULL;
4 BEGIN
5 IF A = B THEN
6 DBMS_OUTPUT.PUT_LINE('NULL É IGUAL A NULL');
7 ELSIF A != B THEN
8 DBMS_OUTPUT.PUT_LINE('NULL É DIFERENTE DE NULL');
9 END IF;
10 END;
11 / |
Procedimento de PL/SQL concluído com êxito.
_________________ Charles Mafra
Oracle Developer
|
|
charlesmafra Rank: Estagiário Sênior

Registrado em: Qui, 19 de Agosto de 2004 Mensagens: 8 Cidade - UF: Angola
|
|
|
 |
| Enviada: Ter, 07 Jul 2009 8:12 am Assunto: SEMPRE FALSE |
|
|
Resumindo:
SEMPRE, qualquer comparação com NULL retorna FALSE.
Sabendo isso, é só utilizar as funções ou IS NULL/IS NOT NULL para comparar.
Falow...
|
|
alexandre5150 Rank: Estagiário Júnior

Registrado em: Sex, 13 de Junho de 2008 Mensagens: 2 Cidade - UF: NOVO HAMBURGO - RS
|
|
|
 |
| Enviada: Sex, 17 Jul 2009 12:15 pm |
|
|
|
Boa dica !!!
Muita gente acaba esquecendo desses detalhes enquanto está codificando.
_________________ _________________
Rodrigo Póvoa
Analista de Sistemas Júnior
Oracle Developer
|
|
rodcapella Rank: Programador Júnior

Registrado em: Ter, 7 de Julho de 2009 Mensagens: 19 Cidade - UF: Rio de Janeiro - RJ
|
|
|
 |
|