Problema de tipos com migração do Oracle 8i para 9i

0 respostas
danieldestro

Caros,

Estou com um problema chato aqui e tem a ver com a mudança de versão do banco Oracle e do driver JDBC.

Antes usávamos o Oracle 8i (8.1.7) e agora usamos o 9i (9.2.0.6). Migramos de banco e tudo funciona normalmente, ou quase tudo. Vimos que alguns cursores ficam presos e segundo o Metalink devemos trocar a versão do driver JDBC (classes12_8.1.7.1.jar por ojdbc14.jar).

Porém, depois da troca do driver JDBC tive um erro de tipos do Java na hora de recuperar os valores do BD. Exemplo:

Quando eu chamo uma procedure do Oracle:

MINHA_PROC(USR IN VARCHAR2, ID OUT NUMBER)

Eu recupero assim no Java:

CallableStatement call = conn.prepareCall("{ call MINHA_PROC(?,?) }", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); call.setString(1, usuario); call.registerOutParameter(2, OracleTypes.INTEGER); call.executeQuery(); Integer id = (Integer) call.getObject(2);

Isso funciona bem com o driver ojdbc14.jar (9.2.0.5), porém dá erro de ClassCastException com o driver classes12_8.1.7.1.jar, pois com o driver do Oracle 8i ele devolve um BigDecimal ao invés de um Integer, mesmo eu tendo registrado o tipo como OracleTypes.INTEGER.

O problema de mudarmos do driver do 8i para o driver do 9i é que teremos erros de conversão em vários pontos do programa.

Alguém sabe como resolver esse problema da melhor maneira possível, minimizando as alterações no fonte da aplicação?

Obrigado
Daniel

Criado 6 de junho de 2005
Respostas 0
Participantes 1