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.