[RESOLVIDO]Retorno de Tipo Complexo em Oracle + CallableStatement

1 resposta
S

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
:D

Abaixo o código que executa a proc

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();
		}
	}
}
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;

1 Resposta

S

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!!!

Criado 20 de julho de 2010
Ultima resposta 20 de jul. de 2010
Respostas 1
Participantes 1