Aprenda PL/SQL

Interessante - Campo NULL

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Sex, 20 Ago 2004 11:33 am

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

Código: Selecionar todos
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>
dr_gori
Localização: Porto Alegre - RS

Thomas F. G
https://www.patreon.com/glufke

Mensagemem Seg, 23 Ago 2004 7:10 am

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

Veja isso

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

Código: Selecionar todos
  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
charlesmafra
Localização: Angola

Charles Mafra
Oracle Developer

Mensagemem Seg, 23 Ago 2004 8:15 am

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:

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

.
tfg
Localização: Novo Hamburgo - RS

Mensagemem Seg, 23 Ago 2004 12:24 pm

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;

Código: Selecionar todos
  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.
charlesmafra
Localização: Angola

Charles Mafra
Oracle Developer


  • 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 1 visitante