Estou com um problema estranho.
Tenho uma aplicação que roda redondo em desenvolvimento (tomcat 5.5.15) e outro em produção (tomcat 5.5.17) que esta com um problema em apenas em serviço.
Mesmo utilizando o banco de produção, em ambiente de desenvolvimento, a aplicação funciona.
O erro é totalmente sem noção: ORA-01858: a non-numeric character was found where a numeric was expected
Gostaria de perguntar a vocês se é possivel haver uma diferença, mesmo que remota, nas versões do tomcat de desenvolvimento e de produção que possa influenciar esse erro. Por exemplo uma discrepancia no getParameter(), que possa gerar um retorno diferente.
A unica coisa que falta trocar é o tomcat. Mas o tomcat de produção é meio complicado.
Isto tem cara de versão errada do driver JDBC da Oracle.
Você está distribuindo o driver JDBC no seu deploy ou já está instalado no Tomcat de produção?
furutani
Ola
O driver não é distribuido no war, está no lib do tomcat, mas é o mesmo.
A versão do oracle do 9i para o 10g poderia influenciar?
L
lap_junior
Furutani, no oracle o formato de data e números são definidos pela configuração do client instalado, verifique se de repente não tem alguma diferença entre os ambientes, por exemplo instalação em línguas diferentes.
flw
O
oyama
Só tome cuidado, pois a politica de nomes de arquivo da Oracle para os drives JDBC é horrivel.
Sim, principalmente se você estiver manipulando Date e Timestamp.
furutani
Então lap_junior,
Já levantamos essa possiblidade, mas os dois bancos estão em portugues.
Teria alguma forma de explicitar a lingua no data source do tomcat?
J
julianostr
Só por via das dúvidas, execute esse select nos 2 bancos:
select * from v$nls_parameters;
Dê uma comparada nos valores…
P
pm1
Os dois utilizam o mesmo SO ?
Tive problemas com isso aki !!!
mas com valores numericos com casas decimais .
furutani
Juliano,
Os dois estão iguais.
Não sei mais o que pode ser.
O pior que tem uma palicação em PHP que usa as mesmas procedures e funciona.
Grato
O
oyama
furutani:
Juliano,
Os dois estão iguais.
Não sei mais o que pode ser.
O pior que tem uma palicação em PHP que usa as mesmas procedures e funciona.
Grato
Boa: verifique se o caracter de separador monetario está igual nas duas JVMs.
Alias, para entender melhor o problema, o erro dá ao chamar uma stored procedure passando um valor com separador de decimais? Como você está setando este valor? setDouble ou setFloat?
furutani
oyama,
Obrigado pela dica.
O sistema criado em PL/SQL é muito complexo, é procedure que chama outra, q chama outra, q chama mais algumas.
Não esta dando erro numa procedure chamada diretamente pelo java.
Os parametros passados são apenas do tipo int, long e String.
A gente já esta ficando sem opçao. Pedimos para compactar o diretorio do tomcat e nos enviar.
Eu não sei tem alguma coisa haver mas o ambiente de produçao é linux/unix e o desenvolvimento é windows.
Obrigado
O
oyama
O que eu queria ver era tipo um Describe da stored procedure que você está chamando em Java, para ver que tipo de dados você está utilizando.
furutani:
Eu não sei tem alguma coisa haver mas o ambiente de produçao é linux/unix e o desenvolvimento é windows.
Então a dica do usuário pm é valida. Se o Linux/Unix for portugues e o Windows em ingles (ou vice-versa) pode dar problema de separador de decimais (, e .), CharCodeSet, etc. Mas pela mensagem tem cara mesmo de caracter separador de decimal ( ORA-01858 ) . Tente logar todos os parametros que você está passando para esta stored procedure. Se tiver algum numero com casa decimal que é passado como string, isto pode ser a fonte do problema. Lembrando que a lingua (language) do Oracle também influencia nisto.
furutani
oyama,
A function que eu chamo pelo java é a seguinte
function FUN_IMPRIMIR
(i_cod in varchar2,
i_situ in varchar2,
i_num_seq in number,
i_num_oper in number,
i_status_mens in varchar2,
o_tel in out varchar2,
o_tel_atend in out varchar2,
o_cntr in out varchar2,
o_cur_imp out gt_cursor)
Como eu citei em uma mensagem anterior o erro vem de uma function pl/sql chamada por outra function que é chamada pela function acima.
Por isso está complicado resolver esse problema. Para ajudar o debug de pl/sql developer não é tão bom quanto ao do eclipse.
Obrigado mais uma vez.
O
oyama
Chute: ta com cara que o problema nao tem nada a ver com o seu codigo em Java. Ta com cara que as bases de dados Oracle estao configuradas com languages diferentes. Execute aquele select que o usuario julianostr passou para ver se esta tudo igual.
Tente executar a stored procedure “na mao” e pegue a linha do erro.
furutani
Ola
Segundo o pessoal de servidores para resolver o problema bastou alterar a variavel lang do linux, dessa forma.
LANG=en_US.UTF-8
Obrigado a todos principalmente ao oyama, lap_junior, pm e julianostr.