Boa tarde
Pessoal eu tenho que chamar uma procedure do oracle pela aplicação java que estou desenvolvendo, mas fiz varios testes e não consigui realizar essa tarefa, minha procedure trabalha com dois dados de entrada: email e senha, e devolve 4 valores, segue a descrição dela :
-
p_USUARIO_LOGIN / VARCHAR2(150) / INPUT
-
p_USUARIO_SENHA / VARCHAR2(10) / INPUT
-
p_USUARIO_ID / NUMBER / OUT
-
p_USUARIO_TIPO_ID / NUMBER / OUT
-
p_USUARIO_NOME / VARCHAR(60) / OUT
-
p_MSG / VARCHAR2 / OUT
Será que alguem pode me ajudar a chamar ela pela aplicação…obrigado
valeu
Caio, este topico vai me ajudar muito tambem. preciso da informação, estou amarrado em uma aplicação neste ponto.
...
CallableStatement cs = Connection.prepareCall("{ call seu_stored_procedure() }");
...
victorwss, vc pode dar um exemplo.
eu tenho esse metodo em meu bean:
public String insereWebServiceNfe() {
try {
Session s = HibernateUtil.getSession();
System.out.println("Inserindo WebService...");
NfeWebService nws = new NfeWebService();
nws.setID_WEBSERVICE(this.idWebService);
nws.setID_UF(this.idUf);
nws.setNM_SERVICO(this.nmServico);
nws.setURL(this.url);
Transaction t = s.beginTransaction();
s.save(nws);
t.commit();
s.close();
System.out.println("WebService Feito.");
return "okInsereWebServiceNfe";
} catch (Exception e) {
System.out.println(e.getMessage());
return "erroInsereWebServiceNfe";
}
}
apos inserir o usuario com o hibernate, onde implemento o CallableStatement ?
obrigado desde já
Boa tarde
Tudo bem mateus, pelo que vi meu problema é mais simples que o seu, eu quero apenas passar parametros para procedure e conseguir ler os valores de retorno dela, tipo ela vai me retornar um resultset, mas esta dando problema na execução do método… alguem ai teria um exemplo desse tipo (Obs: O banco de dados é o oracle).
Valeu…
Tudo bem Caio.
Entao meu banco tb é Oracle.
Eu apenas preciso executar a SP que popula o campo id de minhas tabelas das tabelas.
Na verdade tabelas da empresa né. Pq por mim seria tudo viu sequence.rsss
[],s
Vou disponibilizar um código que chama uma procedure que recebe dois parametros um de entrada e outro de saida
CallableStatement cs = conexao.prepareCall( "{ call main(?,?) }" );
cs.setString(1, "VALOR DE ENTRADA");
// registro de saida
cs.registerOutParameter(2, OracleTypes.VARCHAR );
cs.execute();
String retorno = cs.getString(2);
Boa tarde
Então, eu fiz como você falou no exemplo mas não funcionou o erro que apareceu foi o seguinte:
ORA-06550: line 1, column 7:
PLS-00201: identifier ‘SP_TPT_AUTENTICACAO_GET’ must be declared
O meu metodo é o seguinte :
cs = conn.prepareCall("{call SP_TPT_AUTENTICACAO_GET(?,?,?,?,?,?)}");
//Parametros de Entrada
cs.setString(1, email);
cs.setString(2, senha);
//Parametros de Saida
cs.registerOutParameter(3, OracleTypes.NUMBER);
cs.registerOutParameter(4, OracleTypes.NUMBER);
cs.registerOutParameter(5, OracleTypes.VARCHAR);
cs.registerOutParameter(6, OracleTypes.VARCHAR);
//Execução da procedure
cs.execute();
//Valor de retorno
String msg = cs.getString(6);
return msg;
Sendo que e mail e senha são os parametros de entrada, a minha sequincia da procedure é:
sp_tpt_autenticacao_get(email, 'senha, v_id_usuario, v_id_tp_usuario, v_usuario_nome, v_msg);
Valeu…
A procedure está compilada no banco sem erros, ela está válida ?
Tenta executar ela na mão sem ser pelo Java e verifica se dar certo.
Pq o código que te passei tá correto, essa é a forma pra chamar um proc passando e recebendo parâmetros com o Oracle.
Pelo erro que está mostrando tô achando bem provável sua procedure estar com algum problema.
Você está conectando no banco correto.
Boa tarde
Então cara, funcionou agora era erro no banco de dados mesmo valeu, deixa eu te perguntar mais uma coisa com relação a chamada de uma procedure que me retorno um OUTCURSOR vc tem um exemplo de como seria feito, tipo:
P_ID_TIPO_USUARIO / NUMBER / INPUT – Parametro de entrada
OUTCURSOR / REF CURSOR / OUTPUT – retorno cursor
Essa procedure irá realizar um select e me devolver esse cursor como faço para trabalhar com esse cursor?
Valeu…