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]