Erro em capturar o retorno de uma Procedure Oracle

2 respostas
santoro

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?

2 Respostas

diogoprosoft

Você usa o mesmo .jar pra conexão para os dois oracle?

santoro

Já testei os dois tanto com o .jar do Oracle 10g R2 quanto o jar do Oracle 11g

Criado 27 de maio de 2011
Ultima resposta 28 de mai. de 2011
Respostas 2
Participantes 2