Executando Procedure Oracle

5 respostas
M

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:

Maneira 1

CallableStatement cs;
cs = conn.prepareCall("{call PRC_PLP_CALCULAR(?)}");
cs.setString(1, parametro);
cs.execute();

Maneira 2

conn 	= DAOConexao.getConnection();
sql	= conn.prepareStatement
	("BEGIN " +
	 "     PRC_PLP_CALCULAR(?); " +
	 "END;");
sql.setString(1, parametro);
sql.execute();
sql.close();

Valew.

5 Respostas

G

Cara, use a primeira.

Até onde eu sei, ela funciona em mais de um banco, não só no oracle, ao contrário da segunda.

[]'s

J

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

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

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

Procedure de banco Oracle:

procedure teste(p_cod_empresa IN number, p_dsc_empresa OUT varchar2, p_dsc_erro OUT varchar2) IS
begin
	p_dsc_erro:= null;

	select 	dsc_empresa 
	into p_dsc_empresa
	from empresa
	where cod_empresa = p_cod_empresa;

exception
	-- Qualquer tipo de erro de banco vai entrar aqui.
	when others then
		p_dsc_erro:= sqlerrm; -- Retorna a mensagem com código e descrição do erro Oracle

end;

Trecho em java para execução e tratamento do erro:

Connection conn = <sua conexão>;
CallableStatement ctsmt = 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 erro
if (ctsmt.getString(3) != null) {
	throw new Exception(ctsmt.getString(3));
}
Criado 19 de outubro de 2006
Ultima resposta 20 de out. de 2006
Respostas 5
Participantes 4