Pessoal, andei pesquisando como executar uma procedure Oracle de dentro de uma classe Java, e fiquei com dúvidas entre duas maneiras. Qual a diferença entre elas:
Até onde eu sei, ela funciona em mais de um banco, não só no oracle, ao contrário da segunda.
[]'s
J
javaman00
Cara realmente acho que a primeira é uma forma de se trabalhar com bancos diferentes…
uma coisa interessante que o amigo poderia contribuir… como trazer erros da proc para o JAVA… ja vi sistemas que não trata corretamente… e o sistema executa a proc e se der erro nao retorna nada… e o sistema continua seu processo normalmente.
J
julianostr
Uma das maneiras de testar se deu erro é criar um parâmetro OUT que conterá a mensagem de erro. Ao executar no java verifica-se se esse parêmetro é diferente de null, se for, exibir a mensagem.
J
javaman00
julianostr:
Uma das maneiras de testar se deu erro é criar um parâmetro OUT que conterá a mensagem de erro. Ao executar no java verifica-se se esse parêmetro é diferente de null, se for, exibir a mensagem.
Cara teria como vc mostrar um exemplo?, ~porque acho que meu algoritimo que executa uma determinada procedure no banco esta cagando em algo…
como poderia implementar esse “pega erro”, tenho pouco conhecimento em oracle.
vlw irmão.
J
julianostr
Procedure de banco Oracle:
procedureteste(p_cod_empresaINnumber,p_dsc_empresaOUTvarchar2,p_dsc_erroOUTvarchar2)ISbeginp_dsc_erro:=null;selectdsc_empresaintop_dsc_empresafromempresawherecod_empresa=p_cod_empresa;exception--Qualquertipodeerrodebancovaientraraqui.whenothersthenp_dsc_erro:=sqlerrm; -- Retorna a mensagem com código e descrição do erro Oracleend;
Trecho em java para execução e tratamento do erro:
Connectionconn=<suaconexão>;CallableStatementctsmt=conn.prepareCall("{call teste(?,?,?)}");ctsmt.setInt(1,100);ctsmt.registerOutParameter(2,Types.VARCHAR);ctsmt.registerOutParameter(3,Types.VARCHAR);ctsmt.execute();// Se o parâmetro OUT p_dsc_erro retornar diferente de null, exibe mensagem de erroif(ctsmt.getString(3)!=null){thrownewException(ctsmt.getString(3));}