Aprenda PL/SQL

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
  

Mensagemem Qua, 14 Nov 2007 11:30 am

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:
Código: Selecionar todos
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
Código: Selecionar todos
DECLARE
        A VARCHAR2(10);
        BEGIN
          A:='';
          IF A like ''
          THEN DBMS_OUTPUT.PUT_LINE('Esse é null!');
          END IF;
       END;
GilberttJR
Localização: São Paulo

Mensagemem Qua, 14 Nov 2007 11:33 am

Redigindo melhor o último código que eu coloquei:
Código: Selecionar todos
DECLARE
A VARCHAR2(10);
BEGIN
A:='';
IF A like ''
THEN DBMS_OUTPUT.PUT_LINE('Esse é VAZIO!');
END IF;
END;
GilberttJR
Localização: São Paulo

Mensagemem Qua, 14 Nov 2007 1:35 pm

E ai beleza?

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

Código: Selecionar todos
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
Tineks
Localização: Araraquara - SP

Cristiano (Tineks)
Araraquara - SP

Mensagemem Ter, 20 Nov 2007 2:38 pm

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


Código: Selecionar todos
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:

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

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

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

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


vlw! :shock:
Renan Orati
Localização: São José do Rio Preto - SP


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem


    Voltar para SQL

    Quem está online

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