SELECT valor com duas casas decimais direto do Oracle

4 respostas
PadrE

Olá pessoal,

É o seguinte… estou dando manutenção em uma aplicação que está com problema de casas decimais ao preencher um arquivo de exportação.
O que acontece é que no código tem um SELECT que lê diversos campos do tipo NUMBER no Oracle mas não faz a conversão deles no código, ou seja, não tem o NumberFormat + Locale antes de escrever o valor no arquivo.

A primeira solução seria colocar o Format nesses campos, mas é que não tenho acesso ao fonte mais atual do programa e nem o pessoal que estou ajudando possui isso. Me disseram ser um programa antigo e começou a ocorrer isso depois que mudaram de servidor.

Bom… olhando o servidor percebi que é um linux e está apenas com o idioma inglês. Como isso não ocorria antes, acredito ser uma configuração de algum parameter do Oracle mesmo, onde posso setar para ela me retornar o valor com duas casas decimais. Como tentativa instalamos o idioma português no Linux, mas o Oracle manteve a configuração de instalação.

Alguém saberia me dizer qual parâmetro seria esse ou se é alguma outra configuração no Oracle10g?

(escrevendo esse post me surgiu a idéia de mexer nas configurações regionais do sistema, logo mais posto o que ocorreu)

Vlw!

4 Respostas

PadrE

(tentando não deixar o post morrer)
Fiz alguns testes em relação as configurações regionais e não tive sucesso…

Em desespero usei o seguinte código para salvar os valroes no campo NUMBER do banco:

TO_CHAR(valor, ‘999999990D99’)

Se eu ler esse mesmo valor da mesma forma consigo as duas casas decimais… mas se fazer um select sem qualquer formatação continuo tendo apenas uma casa, o que me gera os erros.

Ainda tenho algumas idéias em mente que vou tentar…

PadrE

Pessoal,

Não achei uma solução direto pelo banco para me retornar os valores com duas casas. A solução foi modificar o código fonte para tratar os valores retornardos usando FormatNumber e Locale (depois de muito sacríficio para conseguir esse fonte).

vlw

N

Brother,

Tenta assim:

SELECT CAST(88 AS NUMBER(6,2)) FROM DUAL;

PadrE

Opa…

Cara… vlw a dica… vou testar essa sua idéia mais para conhecimento mesmo… porque não vai rolar pedir pros caras mexerem nisso, ainda mais depois de ter resolvido com o uso do locale e format…

Se der certo com esse cast, vou ter mais uma forma de ajudar nas manutenções… que é o que tenho feito e muito ultimamente… tô me sentindo um bombeiro… ^^

Abrs

Criado 19 de novembro de 2010
Ultima resposta 30 de mar. de 2011
Respostas 4
Participantes 2