Página 1 de 1

Interessante - Campo NULL

Enviado: Sex, 20 Ago 2004 11:33 am
por dr_gori
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> 

Discordo...

Enviado: Seg, 23 Ago 2004 7:10 am
por charlesmafra
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

Enviado: Seg, 23 Ago 2004 8:15 am
por tfg
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)

.

valor inicial

Enviado: Seg, 23 Ago 2004 12:24 pm
por charlesmafra
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.