Pessoal, possuo uma procedure no Oracle que retorna um Type que criei no Oracle, o interessante é que rodando o java para capturar o retorno do Oracle Xe 11g (Beta) ele roda perfeitamente
conn.getTypeMap().put(ValProc.ORACLE_OBJECT_NAME, ValProc.class);
conn.getTypeMap().put(ValProc.ORACLE_USER_ARRAY_NAME, ValProc[].class);
String proc = "{call minhaProcedure(?,?)}";
CallableStatement stat = conn.prepareCall(proc);
stat.setInt("codigo", 11);
stat.registerOutParameter("Tab", OracleTypes.ARRAY,
ValProc.ORACLE_USER_ARRAY_NAME);
stat.execute();
Object[] array = (Object[])stat.getArray("Tab").getArray();
for(Object obj : array){
ValProc v = (ValProc)obj;
if (v != null){
System.out.println("CODIGO: " + v.getCodigo());
System.out.println("DESCRICAO: " + v.getDescricao());
System.out.println("RESUMO: "+v.getResumo());
System.out.println("_______________________________");
}
}
Este código roda sem problemas, porém quando rodo o mesmo código acessando procedure igual com tipos iguais obtenho o seguinte retorno no Oracle 10g:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at oracle.sql.OracleJdbc2SQLInput.readInt(OracleJdbc2SQLInput.java:235)
at teste.ValProc.readSQL(ValProc.java:42)
at oracle.sql.STRUCT.toClass(STRUCT.java:648)
at oracle.sql.STRUCT.toJdbc(STRUCT.java:586)
at oracle.jdbc.oracore.OracleTypeUPT.unpickle81UPT(OracleTypeUPT.java:502)
at oracle.jdbc.oracore.OracleTypeUPT.unpickle81rec(OracleTypeUPT.java:456)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unpickle81ImgBodyElements(OracleTypeCOLLECTION.java:1014)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unpickle81ImgBody(OracleTypeCOLLECTION.java:955)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unpickle81(OracleTypeCOLLECTION.java:767)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unlinearizeInternal(OracleTypeCOLLECTION.java:243)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unlinearize(OracleTypeCOLLECTION.java:217)
at oracle.sql.ArrayDescriptor.toJavaArray(ArrayDescriptor.java:891)
at oracle.sql.ARRAY.getArray(ARRAY.java:315)
at teste.ExecutaProcedure.main(ExecutaProcedure.java:36)
este erro ocorre na linha
Object[] array = (Object[])stat.getArray("Tab").getArray();
Alguma idéia do que pode ser feito?