Executar procedure com PreparedStatement

Olá

Há alguma forma para executar uma procedure com PreparedStatement e recuperar os parametros de out dessa procedure?

Eu preciso executar uma instrução SQL similar a essa:

DECLARE
     valores(i).valor1 pac_tipos.tipo_valor := 'A';
     valores(i).valor2 pac_tipos.tipo_valor := 'B';
     retorno varchar2(1000); -- parametro de out
BEGIN
     pro_atualizar(valores, retorno);
END;

Se eu executar esse SQL com o executeQuery() vai funcionar mas o problema é pegar o conteudo da variavel retorno.
Usando CallableStatement o problema seria inputar a variavel valores que é um TYPE table of.

Obrigado

Eu não entendi muito bem, de qualquer forma, não seria algo mais ou menos assim:

CallableStatement call = myConn.prepareCall("EXEC PROC_XPTO(?,?)");
call.setInt(1, codigo);
call.registerOutParameter(2, java.sql.types.VARCHAR);

call.execute();

String x = call.get(2);

[quote=furutani]Se eu executar esse SQL com o executeQuery() vai funcionar mas o problema é pegar o conteudo da variavel retorno.
Usando CallableStatement o problema seria inputar a variavel valores que é um TYPE table of.[/quote]

e ae…

o Type ARRAY não resolve?!

Eu faço com CallableStatement e parece que não resolve seu caso.
Se sua variável valores for finita, será que vc não terá que passar valor a valor pra procedure?!

Olá

O problema é o type que esta dentro de uma package, se estivesse fora funcionaria.
Esse problema de array com oracle eu relatei nesse post http://www.guj.com.br/posts/list/63334.java.

Obrigado

Olá

O problema foi resolvido dessa forma.

[code]public void executarProTeste() {
Connection con = getJDBCConnection();

    StringBuilder sb = new StringBuilder();

    sb.append("DECLARE                                         ");
    sb.append("  v_nome  varchar2(20) := 'ROBERTO';            ");
    sb.append("  v_snome varchar2(20) := 'FURUTANI';           ");
    sb.append("BEGIN                                           ");
    sb.append("  pro_teste(v_nome, v_snome, ?);                ");
    sb.append("                                                ");
    sb.append("END;");

    try {
        CallableStatement cs = con.prepareCall(sb.toString());

        cs.registerOutParameter(1, Types.VARCHAR);

        cs.execute();

        System.out.println(cs.getString(1));

    } catch (Exception e) {
        e.printStackTrace();
    }

}[/code]

[code]procedure PRO_TESTE(i_nome in varchar2,
i_sobrenome in varchar2,
o_retorno out varchar2) is
begin
o_retorno := 'Nome completo: ’ || i_nome || ’ ’ || i_sobrenome;

exception when others then
o_retorno := 'ERRO - ’ || sqlerrm;

end PRO_TESTE;[/code]