Colega, seguinte : no banco Oracle *** não existe *** o conceito de 'formato 
interno' de um número ou de uma data, o banco SEMPRE passa pro cliente o que 
foi pedido e é O CLIENTE que tem que formatar isso, ok ? Formatação é PROBLEMA 
DO CLIENTE, ok ?? O banco faz a tarefa dele de entregar o dado, o cliente é que 
se vira pra formatar... Somente ** SE ** e apenas ** SE ** o cliente não 
especificou rigorosamente NADA em termos de format são usados os defaults NLS 
(tal como NLS_NUMERIC_xx e NLS_DATE_FORMAT), certo ? Um exemplo no 9i com CAST 
como vc mostrou :

Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Oracle Data Mining 
options
JServer Release 9.2.0.8.0 - Production

SQL> select cast(120 as number(10,3)) from dual;

CAST(120ASNUMBER(10,3))
-----------------------
                    120

==> no meu caso o meu cliente estava formatando sem mostrar zeros decimais, 
vamos ver PRIMEIRO que a informação ESTÀ vindo sim em 3 casas :

SQL> select cast(120.001 as number(10,3)) from dual;

CAST(120.001ASNUMBER(10,3))
---------------------------
                    120,001

==> taí, quando havia alguma significativa eu a RECEBI, não estou perdendo 
NADICA de NADA , ok : E em segundo lugar, agora vou formatar NO MEU CLIENTE o 
número :

SQL> set NUMFORMAT 9G999G999D009

==> veja só :

SQL> select cast(120.001 as number(10,3)) from dual;

CAST(120.001ASNUMBER(10,3))
---------------------------
                    120,001

SQL> select cast(120.000 as number(10,3)) from dual;

CAST(120.000ASNUMBER(10,3))
---------------------------
                    120,000

yes ??? Isto nos mostra que formatação *** NÂO TEM A VER *** com o servidor, é 
no programa CLIENTE, usando os recursos DO CLIENTE, seja ele qual for, que vc 
formata, yes ?? Então se vc quer passar um datatype NUMBER pro cliente (que já 
contém inteiros e decimais) então passe, é ELE que tem que se virar pra 
formatar, sim ?

[]s

 Chiappa

--- Em oracle_br@yahoogrupos.com.br, Thiago Delfim <tdel...@...> escreveu
>
> Gleyson,
> 
> Obrigado pela resposta. Eu sei que não há diferença nesses valores, porém o
> usuário final (na verdade um sistema externo que consulta uma view no nosso
> banco de dados) queria ver os dados com as 3 casas decimais. Conseguimos
> fazer no isso no Oracle 10g mas não teve o mesmo efeito no 9i. O client que
> eu usei nos dois casos é o mesmo, apenas apontando para um outro banco
> diferente. Você sabe se alguma configuração no servidor pode afetar essa
> exibição? Ou se há mesmo alguma diferença de tratamento entre o 9i e o 10g?
> 
> De qualquer forma, já convenci o usuário de que o valor está certo, e se ele
> estiver esperando um número real, tanto faz o jeito como o Oracle retorna
> eles (com ou sem casas decimais). Só teria problema se tivessem casas
> decimais e ele usasse uma variável inteira ou se ele trata isso como string,
> o que acho não ser o caso.
> 
> -- 
> Thiago Delfim
> Oracle 9i Database Certified Professional
> Oracle 10g Database Certified Professional
> tdel...@... (MSN)
> Campinas/SP
> (19) 8204-2681 / 9111-1439
> 
> 2009/4/4 Gleyson Melo <gleysonm...@...>
> 
> >   Fala Thiago, tudo em paz?
> > Vamos começar com duas perguntas: 120 é igual a 120,000? 120 é igual a 0x78
> > (hexadecimal)?
> >
> > Matematicamente sim. Então porque "parecem" diferentes? A diferença é a
> > representação do número.
> > A representação do número é uma string. O que está diferente não é o
> > número,
> > é o formato, como a gente pode ver pelo exemplo:
> >
> > SQL> select cast(120 as number(10,3)) as numero from dual;
> >
> > NUMERO
> > ----------
> > 120
> >
> > SQL> col numero for 999D999
> > SQL> select cast(120 as number(10,3)) as numero from dual;
> >
> > NUMERO
> > --------
> > 120,000
> >
> > SQL>
> >
> > Isso é configuração a nível de cliente.
> >
> > Espero ter ajudado.
> >
> > Um abraço.
> >
> > 2009/3/31 Thiago Delfim <tdel...@... <tdelfim%40gmail.com>>
> >
> > > Pessoal,
> > > Algúem já teve algum problema desse tipo:
> > >
> > > select cast(120 as number(10,3)) from dual;
> > >
> > > No Oracle 9i retorna: 120
> > > No oracle 10g retorna: 120,000
> > >
> > > É isso mesmo? Existem diferenças no CAST entre as duas versões do Oracle?
> > >
> > > Estou usando CAST para que uma VIEW retorne os números no formato
> > > NUMBER(10,3). Fiz com CAST no Oracle 10 e funcionou como eu queria, mas
> > no
> > > Oracle 9 não. Como eu posso ter o mesmo efeito no Oracle 9 já que o CAST
> > > tem
> > > comportamento diferente?
> > >
> > > --
> > > Thiago Delfim
> > > Oracle & SQL Server Database Administrator
> > > Oracle 9i Database Certified Professional
> > > tdel...@... <tdelfim%40gmail.com> <tdelfim%40gmail.com> (MSN)
> > > Campinas/SP
> > > (19) 8204-2681 / 9111-1439
> > > Sent from Campinas, São Paulo, Brazil
> > > Rodney Dangerfield - "I haven't spoken to my wife in years. I didn't want
> > > to interrupt her."
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > >
> > >
> >
> > --
> > Atenciosamente,
> > Gleyson Melo
> > Oracle Database 10g Administrator Certified Professional
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >  
> >
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>


Responder a