Pessoal, Boa noite.
Eu tenho uma duvida quem puder me ajudar agradeço, eu recebo uma mensagem de retorno de uma Stored Procedures que foi feita pela equipe de Banco de Dados e e o retorno da minha procedure é 1
conforme trecho abaixo:
Procedimento PL/SQL concluído com sucesso.
1
como eu faço pra obter esse retorno que é 1 ? segue meu metodo abaixo.
public long getGeraMovimento(int codLoja, String dtTransacao) {
PreparedStatement ps = null;
ResultSet resultSet = null;
String call = ("{CALL PKG_GERA_MOVIMENTO_VENDA.GERA_MOVIMENTO_VENDA(?,?,?,?)}");
try {
CallableStatement cs = connection.prepareCall(call);
cs.registerOutParameter(2, Types.INTEGER);
cs.setInt(1, (codLoja));
cs.setLong(2, Long.valueOf(dtTransacao));
cs.setNull(3, Types.INTEGER);
cs.setInt(4, 1);
cs.executeQuery();
int retorno = cs.getInt(2);
System.out.println(retorno);
} catch (Exception e) {
System.out.println(e);
}
return 1;
}
}
Você tem o código da stored procedure?
Faz muito tempo que nao trabalho com oracle, mas pelo que me lembro stored procedures nao retornavam valor, você tinha que usar parâmetros OUT pra ter um retorno.
Posso estar me equivocando, me corrijam se eu estiver falando besteira, mas pelo meu conhecimento em BD, toda e qualquer SP não tem retorno, ela somente executa a ação para a qual ela foi designada, se você precisa obter um retorno o ideal seria a implementação de uma FUNCTION
, porquê funções podem te dar um retorno de informações em diversos formatos.
As SP’s geralmente tem as definições de IN/OUT
, mas não sei se no java existe algum recurso que possibilite que você obtenha essas informações de saída.
SP
CREATE PROCEDURE SHOW_SUPPLIERS()
BEGIN
SELECT
SUPPLIERS.SUP_NAME,
COFFEES.COF_NAME
FROM
SUPPLIERS, COFFEES
WHERE
SUPPLIERS.SUP_ID = COFFEES.SUP_ID
ORDER BY
SUP_NAME;
END
JDBC
CallableStatement cs = this.con.prepareCall("{call SHOW_SUPPLIERS()}");
ResultSet rs = cs.executeQuery();
while (rs.next()) {
String supplier = rs.getString("SUP_NAME");
String coffee = rs.getString("COF_NAME");
System.out.println(supplier + ": " + coffee);
}
FONTE: Using Stored Procedures
Pessoal, Boa tarde. desculpe a demora mais lendo alguns artigos acabei achando a solução na verdade já tinha realizado o procedimento só que eu não tinha registrado a procedure e também não estava chamando o parâmetro correto, segue abaixo a solução para esse problema.
DESDE Á AGRADEÇO A TODOS !
public long getGeraMovimento(int codLoja, String dtTransacao) {
PreparedStatement ps = null;
long retorno = 0;
String call = ("{CALL PKG_GERA_MOVIMENTO_VENDA.GERA_MOVIMENTO_VENDA(?,?,?,?)}");
try {
CallableStatement cs = connection.prepareCall(call);
cs.setInt(1, (codLoja));
cs.setLong(2, Long.valueOf(dtTransacao));
cs.registerOutParameter(3, Types.INTEGER);
cs.setInt(4, 1);
cs.execute();
retorno = cs.getLong(3);
} catch (Exception e) {
System.out.println(e);
}
return retorno;
}
}