O tomcat pode influenciar em procedures Oracle?

14 respostas
furutani

Olá

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.

Grato

14 Respostas

O

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

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

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

Só por via das dúvidas, execute esse select nos 2 bancos:

select * from v$nls_parameters;

Dê uma comparada nos valores…

P

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

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

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

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.

Criado 24 de novembro de 2006
Ultima resposta 4 de dez. de 2006
Respostas 14
Participantes 5