Interessante - Campo NULL

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Vejam isso.. Criei uma view com um campo NULL.
O campo fica gravado com VARCHAR2(0). Isso prova que NULL=VARCHAR2(0)... :-)

Selecionar tudo

SQL> CREATE OR REPLACE VIEW VIEW_NULL AS
  2  SELECT
  3    NULL CAMPO_NULL
  4  FROM DUAL;

View created.

SQL> DESC VIEW_NULL;
 Name                            Null?    Type
 ------------------------------- -------- ----
 CAMPO_NULL                               VARCHAR2(0)

SQL> 
charlesmafra
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Qui, 19 Ago 2004 9:45 am
Localização: Angola
Contato:
Charles Mafra
Oracle Developer

Discordo, null is null , Null não é igual a um varchar2(0);

Veja isso

Selecionar tudo

SQL> declare
  2  a varchar2(0) default null;
  3  begin
  4  null;
  5  end;
  6  /
a varchar2(0) default null;
           *
ERRO na linha 2:
ORA-06550: linha 2, coluna 12:
PLS-00215: Restrições do comprimento das cadeias de car. devem estar dentro do
intervalo (1 .. 32767)

Complementando... porque o Null é um number então?

Selecionar tudo

  1  CREATE OR REPLACE VIEW VIEW_NULL AS
  2      SELECT
  3        NULL CAMPO_NULL
  4        ,TO_NUMBER(NULL) CAMPO_NULL_NUMERICO
  5* FROM DUAL
SQL> /

Vista criada.

SQL> DESC VIEW_NULL;
 Nome                                      Nulo?    Tipo
 ----------------------------------------- -------- ----------------------------
 CAMPO_NULL                                         VARCHAR2
 CAMPO_NULL_NUMERICO                                NUMBER
Avatar do usuário
tfg
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 83
Registrado em: Seg, 03 Mai 2004 3:38 pm
Localização: Novo Hamburgo - RS

Interessante esse tópico... (Parece aquelas aulas de filosofia onde se debate "o que é o nada" )

Mas não querendo botar mais lenha na fogueira, veja o PL abaixo:

Selecionar tudo

THO> DECLARE
  2    A VARCHAR2(10);
  3  BEGIN
  4    A:='';
  5    IF A IS NULL
  6    THEN DBMS_OUTPUT.PUT_LINE('Esse é null!');
  7    END IF;
  8  END;
  9  /

PL/SQL procedure successfully completed.

THO> SET SERVEROUTPUT ON
THO> /
Esse é null!

PL/SQL procedure successfully completed.

THO> 
Mas eu concordo com o charlesmafra. Também acho que NULL é NULL. (esse exemplo que eu citei acima não muda minha opinião)

.
charlesmafra
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Qui, 19 Ago 2004 9:45 am
Localização: Angola
Contato:
Charles Mafra
Oracle Developer

Como pode ver no seu exemplo, se tirarmos a atribuição que você fez, continua dizendo que "A" is null.

Poruqe a variável é inicializada com null automaticamente...

escrever

a varchar2(10); é igual a
a varchar2(10) := null; e igual a
a varchar2(10) default null;

Selecionar tudo

  1  DECLARE
  2        A VARCHAR2(10);
  3      BEGIN
  4        --A:='';
  5        IF A IS NULL
  6        THEN DBMS_OUTPUT.PUT_LINE('Esse é null!');
  7        END IF;
  8*     END;
SQL> /
Esse é null!

Procedimento de PL/SQL concluído com êxito.

SQL> 
Quando você fez "A:='' " você não atribui um espaço em branco, você apenas abriu e fechou aspas, há de concordar comigo que isto não é "nada" ou seja Null.
Responder
  • Informação
  • Quem está online

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