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] >