Null é igual a branco ?

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
GilberttJR
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Sex, 26 Out 2007 9:33 am
Localização: São Paulo

Olá pessoal.

No link abaixo encontrei uma breve troca de idéias entre dr_gori e charlesmafra acerca de como o Oracle trata o null e o em branco ''.

http://glufke.net/oracle/viewtopic.php?p=357

Agora me digam: Como eu faria para o Oracle identificar um campo em branco ? (No caso do MSSQL server, null e '' são duas coisas diferentes).
Ao que me parece quando salvo uma coluna com valor em branco (e não nulo) o Oracle interpreta com null.

Veja o código sugerido pelo charlesmafra:

Selecionar tudo

DECLARE 
        A VARCHAR2(10); 
        BEGIN 
          --A:=''; 
          IF A is NULL 
          THEN DBMS_OUTPUT.PUT_LINE('Esse é null!'); 
          END IF; 
       END;
Por que o Oracle não reconhece o branco '' ?Por exemplo

Selecionar tudo

DECLARE 
        A VARCHAR2(10); 
        BEGIN 
          A:=''; 
          IF A like ''
          THEN DBMS_OUTPUT.PUT_LINE('Esse é null!'); 
          END IF; 
       END;
GilberttJR
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Sex, 26 Out 2007 9:33 am
Localização: São Paulo

Redigindo melhor o último código que eu coloquei:

Selecionar tudo

DECLARE 
A VARCHAR2(10); 
BEGIN 
A:=''; 
IF A like '' 
THEN DBMS_OUTPUT.PUT_LINE('Esse é VAZIO!'); 
END IF; 
END;
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

E ai beleza?

cara no meu ponto de vista '' é igual a null sim, abaixo vai uns testes eu fiz..

Selecionar tudo

SQL> ED
Wrote file afiedt.buf

  1  DECLARE
  2     v_testeC VARCHAR2(1) := ' ';
  3  BEGIN
  4     /* PONTO 1 */
  5     IF (v_testeC <> '') THEN
  6        dbms_output.put_line('C não é vazio, pto 1');
  7     END IF;
  8     /* PONTO 2 - PROPOSITALMENTE*/
  9     IF (v_testeC <> NULL) THEN
 10        dbms_output.put_line('C não é vazio, pto 2');
 11     END IF;
 12     /* PONTO 3 - PROPOSITALMENTE*/
 13     IF (v_testeC IS NULL) THEN
 14        dbms_output.put_line('C é vazio, pto 3');
 15     ELSE
 16        dbms_output.put_line('C não é vazio, pto 3');
 17     END IF;
 18* END;
SQL> /
C não é vazio, pto 3

PL/SQL procedure successfully completed.
Nesse caso minha variavel vale ' ', ai vem a primeira pergunta, sabemos que '' é diferente de ' ', se isso é verdade porque não entrou no ponto 1? bem, acredito que o não tenha entrado porque internamente o ponto 1 funciona da mesma forma que o ponto 2, o banco acaba substituindo '' por null..
No ponto 3 só fiz uma consistencia verificando se ' ' é nulo ou não..

[]'s
Renan Orati
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 90
Registrado em: Qui, 23 Ago 2007 3:40 pm
Localização: São José do Rio Preto - SP

aí kara... fiz o mesmo teste... utilizando o NVL para comparar!

Selecionar tudo

SELECT NVL('TESTE', 'VALOR-NULO') FROM DUAL;

SELECT NVL(' ', 'VALOR-NULO') FROM DUAL;

SELECT NVL(NULL, 'VALOR-NULO') FROM DUAL;

SELECT NVL('', 'VALOR-NULO') FROM DUAL;
E obtive o seguinte resultado:

Selecionar tudo

NVL('TESTE','VALOR-NULO')
-------------------------
TESTE
 
NVL('','VALOR-NULO')
--------------------
 
NVL(NULL,'VALOR-NULO')
----------------------
VALOR-NULO
 
NVL('','VALOR-NULO')
--------------------
VALOR-NULO

vlw! :shock:
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 14 visitantes