[RESOLVIDO]Retorno de Tipo Complexo em Oracle + CallableStatement

Boa noite pessoal!!!

Eu revirei a web procurando algum exemplo de como tratar o retorno de uma proc que seja um TYPE e não consegui encontrar nenhuma resposta.

Obs. Se a procedure retornar os tipos como CURSOR, VARCHAR o código funciona na boa agora quando tem um TYPE no out da proc da erro de:

java.sql.SQLException: ORA-06550: linha 1, coluna 7: PLS-00306: número incorreto de tipos de argumentos na chamada para 'P_BUSCAPESSOA_TYPE' ORA-06550: linha 1, coluna 7: PL/SQL: Statement ignored

Este erro é por conta de eu estar passando um tipo que não é o esperado.

Neste post teve dicas mais não final não houve uma solução:
http://www.guj.com.br/posts/list/38564.java

Se puderem me ajudar…fico muito agradecido
:smiley:

Abaixo o código que executa a proc

[code]
package br.com.testediverso;

import java.sql.CallableStatement;
import java.sql.Connection;

import br.com.jdbc.ConnectionFactory;

public class Teste1 {

public static void main(String args[]) {
	try {
		Connection con = ConnectionFactory.getConnection();
		
		CallableStatement call = con.prepareCall("{call P_BUSCAPESSOA_TYPE(?,?)}");
		
                    //Seto um valor para clausula where da proc
		call.setInt(1, 4);
		
                    //Registrar o parametro de retorno
		call.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);
		
                    //Executar proc  
		call.executeQuery();

                    //Exibir na tela retorno
		System.out.println(call.String(2));
		
				
	} catch (Exception e) {
		e.printStackTrace();
	}
}

}[/code]

Mais abaixo o tipo e a procedure

create or replace type t_lista_numero is table of number(10);

create or replace
PROCEDURE P_BUSCAPESSOA_TYPE (
  P_ID IN NUMBER,
  P_NUM OUT T_LISTA_NUMERO) IS 

BEGIN 

      BEGIN
            SELECT 
              NUM
            BULK COLLECT INTO
              P_NUM
            FROM 
              QUA_PESSOA
            WHERE
              ID = P_ID;
            
            --codigo para visualizar o retorno da proc
            BEGIN
              for i in P_NUM.first..P_NUM.last loop
                  dbms_output.put_line('valores: '||to_char(P_NUM(i)));
              end loop;
            END;
      END;
END;

Ai pessoal consegui tratar a parada.

Seguindo a dica do post que referencie acima.

call.registerOutParameter(2, oracle.jdbc.OracleTypes.ARRAY, "T_LISTA_NUMERO");

É só passar o tipo do retorno da PROC no terceiro parâmetro.

e aí é só alegria;

Array array = call.getArray(2);
ResultSet rs = array.getResultSet();

Agora que está no ResultSet é um abraço!!!

Se souberem de outra solução melhor postem aí…

Valeu!!!